采集站必备的PHP全能路由:适用二级目录/无伪静态情况/可处理多级URI路径和GET参数

搬瓦工机场JMS

网站路由(不是机房路由器)一直是个头疼的问题,对于网站路径市面上有两种解决方案:
1. 用户输入网站地址,采用绝对路径,例如WordPress、Typecho,难以实现单网站多域名。
2. 使用相对路径自适应,例如Xiuno,无法处理带有/的URI路径参数。
于是写了一个PHP路由,可适用于二级目录、无伪静态情况,可处理多级URI路径、GET参数。

【演示】
主页:http://demo.freevar.com/route/
这个演示文件是二级目录route中的index.php,可以适应。
无伪静态:http://demo.freevar.com/route/index.php/adfds/hfdsgsf?a=1&b=2
当服务器不支持伪静态时,使用/index.php/访问,获得同样效果。
有伪静态:http://demo.freevar.com/route/adfds/hfdsgsf?a=1&b=2
开启伪静态后,网站URL地址更加美观。

【说明】
文件根目录:程序文件所在路径,用于调用资源。例如引用[文件根目录/style.css],可以正确定位到文件。
网站根目录:网站主页地址,兼容无伪静态。例如无伪静态时将链接到[index.php/abc.html],确保可访问。
请求路径:用户请求的路径,作为一个参数调用。例如访问[网站/zhuji/usa.html],该参数为[zhuji/usa.html]。
请求参数:GET请求(?)后的参数数组,单独提取供调用,区别于REQUEST_URI。
程序名:可以不是index.php,但服务器要重新设置主页为该文件。

【代码】

<?phpdefine('wenjiangenmulu',substr($_SERVER['SCRIPT_NAME'],0,strripos($_SERVER['SCRIPT_NAME'],'/')+1));define('wangzhangenmulu',(stripos($_SERVER['REQUEST_URI'],$_SERVER['SCRIPT_NAME'])===0)?$_SERVER['SCRIPT_NAME'].'/':wenjiangenmulu);define('qingqiulujing',substr(stristr($_SERVER['REQUEST_URI'],'?',true)?:$_SERVER['REQUEST_URI'],strlen(wangzhangenmulu)));echo '<!DOCTYPE HTML><html><head><meta charset="utf-8" /><title>全能路由</title></head><body><b>全能路由</b><br />[文件根目录] '.wenjiangenmulu.'<br />[网站根目录] '.wangzhangenmulu.'<br />[请求路径] '.qingqiulujing.'<br />[请求参数]<br />';print_r($_GET);echo '<br />[服务器]<br />';print_r($_SERVER);echo '<br /></body></html>';?>

【服务器重写配置】
Apache:

RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^route/(.*)$ /route/index.php

Nginx:

locatiON /route {try_files $uri $uri/ /route/index.php?$args;}

未经允许不得转载:Just My Socks中文教程网 » 采集站必备的PHP全能路由:适用二级目录/无伪静态情况/可处理多级URI路径和GET参数

赞 (0) 打赏
Just My Socks搬瓦工机场JMS

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏