PHP 伪静态技术原理以及突破原理实现介绍

伪静态技术比较好突破,需要自己构造中转注入页面;伪静态技术原理都很简单,就是把原来的 index.php?id=1 这种形式的URL给替换成其它形式

先说实现方法: 
inj.php: 

用wamp搭建一个服务器,把上面inj.php放到wamp/www/中,然后在Havij中跑 http://127.0.0.1/inj.php?id=1 
=========================== 
PHP伪静态实现方法一(利用Apache 服务器的功能) 
1、检查Apache是否支持modrewrite 
2、让Apache 支持.htaccess 
3、建立.htaccess文件 
4、规则: 
RewriteEngine on 
RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$index.php?action=$1&id=$2 
([a-zA-Z]{1,})-([0-9]{1,}) 是 URL长啥样 
$1 是([a-zA-Z]{1,}) 所匹配的 
$2 是[0-9]{1,} 所匹配的 
比如说:www.xx.com/page-18.html 
真实的URL如下: 
action = page 
id = 18 
========================== 
PHP伪静态实现方法二(编码实现) 
$Php2Html
FileUrl = $SERVER[“REQUESTURI”] 
echo $Php2Html_FileUrl 
例子:// localhost/php100/test.php?id|1@action|2 

$Php2HtmlUrlString = strreplace("?","",strreplace("/","",strrchr(strrchr($Php2HtmlFileUrl,"/"),"?")) )) /* 内层的strrchr出来:/test.php?id|1@action|2 外层的strrchr出来:id|1@action|2 内层的strreplace出来:把 / 号去掉,本例子 没有 外层的strreplace出来:把 ?号去掉,本例子 没有 / $Php2Html_UrlQueryStrList = explode("@",$Php2Html_UrlString); /把str变成以@为界限划分的数组:id|1 和 action|2/ foreach($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr) { $Php2Html_TmpArray = explode("|",$Php2Html_UrlQueryStr); / id => 1 和 action => 2*/ $GET[$Php2HtmlTmpArray[0]] = $Php2Html_TmpArray[1]; }

=========================
PHP伪静态实现方法三(编码实现) 
例子: localhost/php100/test.php/1/2 

$filename = basename($SERVER["SCRIPTNAME"]); echo $SERVER["SCRIPTNAME"]; echo $filename; if(strtolower($filename) 'test.php'){ if(!empty($GET[id])){ $id=intval($GET[id]); echo $id; $action = intval($GET[action]); echo $action; }else{ $nav=$SERVER["REQUESTURI"]; $script=$SERVER["SRCIPTNAME"]; //这句话应该是把URL前面那段给搞掉。。剩下 "1/2"之类的。。 $nav=eregreplace("$script","",urldecode($nav)); echo $nav; $vars = explode("/",$nav); print_r($vars); $id=intval($vars[1]); $action=intval($vars[2]); } echo $id.'&'.$action; }

=========================
PHP伪静态实现方法四(编码实现) 

function modrewrite(){ global $GET; $nav = $SERVER["REQUESTURI"]; $scriptname = $SERVER["SCRIPTNAME"] $nav=substr(eregreplace("$scriptname"),"",urldecode($nav)),1); $nav=pregreplace("/^.ht(m){1}(l){0,1}$/","",$nav);//去掉尾部的htm或html $vars=explode("/",$nav); printr($vars); for($i=0;$iGET[$vars[$i]] = $vars[$i+1]; } return $_GET; }

========================== 
PHP伪静态实现方法五(编码实现) 
例子:/1,100,8630.html 

if(pregmatch(“/\/(\d+),(\d+),(\d+).html/si”,$pathinfo,$arrpath)){ $gid =intval($arrpath[1]); //取得值1 $sid =intval($arrpath[2]); //取得值100 $softid =intval($arrpath[3]); //取得值8630 } else echo "Path:Error!";

总结下: 
(1)伪静态技术比较好突破,需要自己构造中转注入页面。 
(2)伪静态技术原理都很简单,就是把原来的 index.php?id=1 这种形式的URL给替换成其它形式。