跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 【技术贴】PHP全能路由,自适应网站路径,采集站必备
未分類
6 2 月 2020

【技术贴】PHP全能路由,自适应网站路径,采集站必备

30826 大佬有话说 : 2020-1-18 20:26:21

【技术贴】PHP全能路由,自适应网站路径,采集站必备

本帖最后由 30826 于 2020-1-18 20:34 编辑

网站路由(不是机房路由器)一直是个头疼的问题,对于网站路径市面上有两种解决方案:
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],可以正确定位到文件。
网站根目录:网站主页地址,兼容无伪静态。例如无伪静态时将链接到,确保可访问。
请求路径:用户请求的路径,作为一个参数调用。例如访问[网站/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;
}

uni2046 大佬有话说 : 2020-1-18 20:27:27

感觉好牛逼

30826 大佬有话说 : 2020-1-18 20:28:25

uni2046 大佬有话说 : 2020-1-18 20:27
感觉好牛逼

大佬多都太谦虚:lol

快雪时晴 大佬有话说 : 2020-1-18 20:30:34

现在不都是框架嘛

30826 大佬有话说 : 2020-1-18 20:32:25

快雪时晴 大佬有话说 : 2020-1-18 20:30
现在不都是框架嘛

框架局限太多了,很多需求还是要自己写……

朕的大清完了? 大佬有话说 : 2020-1-18 20:42:50

框架不香吗?

自己写的话,也没几个页面,直接手工做个伪静态规则就好了

30826 大佬有话说 : 2020-1-18 20:52:08

朕的大清完了? 大佬有话说 : 2020-1-18 20:42
框架不香吗?

自己写的话,也没几个页面,直接手工做个伪静态规则就好了 …

强迫症啊,实在懒得写一堆伪静态规则……
像我这种WP的伪静态可以直接拿来用。

阿良 大佬有话说 : 2020-1-18 21:32:29

马克一下。。

秘密 大佬有话说 : 2020-1-18 21:39:34

先收藏一下

lunone 大佬有话说 : 2020-1-18 21:50:45

恰巧前一段搞过这玩意,看大佬用的是REQUEST_URI,实际上REQUEST_URI,也并不完全一致,我看到还特意过滤了一下queryString,其实各个服务器默认行为和配置还真不保险的。忘了具体心路历程了。在尝试过好多版本情况下,现在的选择是优先path_info,其次request_uri,最后实在不行用SCRIPT_NAME。每个服务器具体情况都不复杂,想写出一个能通用匹配的还真是头大。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具