php伪静态

一直以为php只能用rewrite做伪静态,搜索了下发现要改apache才行,而大多数虚拟主机都是不能直接修改apache,后来发现其他方法,主要是用$_SERVER,参考文章http://www.qqcat.com/art/2/2190.html,不知道这个代码的作者是是谁!如果原作者看到了,请联系我!

/*
功能:PHP伪静态化页面的实现
具体用法:
例如链接为:test.php/year/2006/action/_add.html
mod_rewrite();
$yearn=$_GET["year"];//结果为'2006'
$action=$_GET["action"];//结果为'_add'

*/
function mod_rewrite(){
global $_GET;
$nav=$_SERVER["REQUEST_URI"];
$script_name=$_SERVER["SCRIPT_NAME"];
$nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1);
$nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//这句是去掉尾部的.html或.htm
$vars = explode("/",$nav);
for($i=0;$i $_GET["$vars[$i]"]=$vars[$i+1];
}
return $_GET;
}
mod_rewrite();
$yearn=$_GET["year"];//结果为'2006'
$action=$_GET["action"];//结果为'_add'
echo $yearn;
echo $action;
?>

尝试了下,发现$nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);这个的正则写的不正确,我用了还是不能去掉htm和html
我的修改代码:$nav=preg_replace("/.htm[l]?/","",$nav);
其实这样已经基本上可以用了,值得注意的是路径的问题。这里主要是想说下,如果已经生成了静态页面,那么可以加一段代码:

if(is_file("htm/$id.htm")) /*判断htm文件夹下是否有htm文件*/

{

echo "<(meta) http-equiv='Refresh' content='0;URL=../../htm/$id.htm'>";/*(meta) 去掉()*/
exit;
}

这样如果有静态页面可以直接跳转到真实的静态页面,如果没有则可以使用伪静态
测试页面:测试页面 无生成htm页面


我也来说2句,请不要发表违反法律的言论
姓名
Email
主页不要加http://
内容

最多300个字


                                         
bin Says

quoit:

博主.看了这文章有个问题想请教能否联系我一下邮件brightzeng@126.com MSN:pob@live.com QQ:686426


我现在上网不方便 ,有什么事在这里留言吧
bright Says

博主.看了这文章有个问题想请教能否联系我一下邮件brightzeng@126.com MSN:pob@live.com QQ:686426