请选择 进入手机版 | 继续访问电脑版
查看: 210|回复: 18

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

[复制链接]

27

主题

443

帖子

931

积分

高级会员

Rank: 4

积分
931
发表于 2020-1-18 20:26:21 | 显示全部楼层 |阅读模式
本帖最后由 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],可以正确定位到文件。
网站根目录:网站主页地址,兼容无伪静态。例如无伪静态时将链接到[index.php/abc.html],确保可访问。
请求路径:用户请求的路径,作为一个参数调用。例如访问[网站/zhuji/usa.html],该参数为[zhuji/usa.html]。
请求参数:GET请求(?)后的参数数组,单独提取供调用,区别于REQUEST_URI。
程序名:可以不是index.php,但服务器要重新设置主页为该文件。
【代码】
[ol]
  • 全能路由
  • 全能路由
  • [文件根目录] '.wenjiangenmulu.'
  • [网站根目录] '.wangzhangenmulu.'
  • [请求路径] '.qingqiulujing.'
  • [请求参数]
  • ';
  • print_r($_GET);
  • echo '
  • [服务器]
  • ';
  • print_r($_SERVER);
  • echo '
  • ';
  • ?>[/ol]复制代码
    【服务器重写配置】
    Apache:
    [ol]
  • RewriteEngine On
  • RewriteCond %{REQUEST_FILENAME} !-f
  • RewriteCond %{REQUEST_FILENAME} !-d
  • RewriteRule ^route/(.*)$ /route/index.php[/ol]复制代码
    Nginx:
    [ol]
  • location /route {
  • try_files $uri $uri/ /route/index.php?$args;
  • }[/ol]复制代码
  • 回复

    使用道具 举报

    4

    主题

    115

    帖子

    258

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    258
    发表于 2020-1-18 20:27:27 | 显示全部楼层
    感觉好牛逼
    回复

    使用道具 举报

    27

    主题

    443

    帖子

    931

    积分

    高级会员

    Rank: 4

    积分
    931
     楼主| 发表于 2020-1-18 20:28:25 | 显示全部楼层

    uni2046 发表于 2020-1-18 20:27
    感觉好牛逼

    大佬多都太谦虚

    回复

    使用道具 举报

    4

    主题

    56

    帖子

    132

    积分

    注册会员

    Rank: 2

    积分
    132
    发表于 2020-1-18 20:27:00 | 显示全部楼层
    现在不都是框架嘛
    回复

    使用道具 举报

    27

    主题

    443

    帖子

    931

    积分

    高级会员

    Rank: 4

    积分
    931
     楼主| 发表于 2020-1-18 20:30:34 | 显示全部楼层

    快雪时晴 发表于 2020-1-18 20:30
    现在不都是框架嘛

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

    使用道具 举报

    97

    主题

    630

    帖子

    1395

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1395
    发表于 2020-1-18 20:32:25 | 显示全部楼层
    框架不香吗?
    自己写的话,也没几个页面,直接手工做个伪静态规则就好了
    回复

    使用道具 举报

    27

    主题

    443

    帖子

    931

    积分

    高级会员

    Rank: 4

    积分
    931
     楼主| 发表于 2020-1-18 20:30:00 | 显示全部楼层

    朕的大清完了? 发表于 2020-1-18 20:42
    框架不香吗?
    自己写的话,也没几个页面,直接手工做个伪静态规则就好了 ...

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

    使用道具 举报

    1

    主题

    14

    帖子

    39

    积分

    新手上路

    Rank: 1

    积分
    39
    发表于 2020-1-18 20:42:50 | 显示全部楼层
    马克一下。。
    回复

    使用道具 举报

    13

    主题

    465

    帖子

    947

    积分

    高级会员

    Rank: 4

    积分
    947
    发表于 2020-1-18 20:52:08 | 显示全部楼层
    先收藏一下
    回复

    使用道具 举报

    0

    主题

    22

    帖子

    48

    积分

    新手上路

    Rank: 1

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

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋| 主机之家 |网站地图

    返回顶部