目前市面上的程序(WordPress、Typecho、Zblog)都是由用户填写网站目录,没有自动适应。比如一个网站绑定多个域名,让每个域名都可以自动匹配。或者更换域名,不用像WP那样还得去数据库修改。
这几行路由可以全自动匹配脚本根目录、网站根目录(伪静态+非伪静态)、请求路径、请求参数。
【演示】
主页:http://demo.freevar.com/route/
无伪静态:http://demo.freevar.com/route/index.php/dsfsdfd?a=1&b=2
有伪静态:http://demo.freevar.com/route/dsfsdfd?a=1&b=2
【代码】
<?php
define('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 On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^route/(.*)$ /route/index.php
Nginx:
location /route {
try_files $uri $uri/ /route/index.php?$args;
}