分类:原创 share 发布 2008.03.23 07:03:06Tag : 伪静态,php commentComment:4
8
dig bury

一直以为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页面

Comment:

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

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


我现在上网不方便 ,有什么事在这里留言吧
朋友.想请教下如何实现php伪静态,不需要服务器支持. 网上很多试了都有问题.万望指教,谢谢!
bin Say:2009.05.03 22:05:57
@php伪静态迷途羔羊
朋友.想请教下如何实现php伪静态,不需要服务器支持. 网上很多试了都有问题.万望指教,谢谢!!
类似这个页面的,你是在哪一步没有看懂? hellophper.com/debate/single.php/id/52.html
我也来说2句,请不要发表违反法律的言论

姓名

Email(必填)

主页(不要加http://)