二维码
搬瓦工 locvps

网站路由(不是机房路由器)一直是个头疼的问题,对于网站路径市面上有两种解决方案:
1. 用户输入网站地址,采用绝对路径,例如WordPressTypecho,难以实现单网站多域名。
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,但服务器要重新设置主页为该文件。

【代码】

<?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;
}
locvps
评论专区
  • 昵 称必填
  • 邮 箱必填
  • 网 址选填
◎已有 0 人评论
BudgetVM
作者介绍
总干事

总干事

总干事作为本站编辑,主要负责VPS优惠、域名优惠和站长百科三个栏目。
80vps henghost
budgetvm sugarhosts
二维码

分享:

支付宝

微信