URL美化与路由配置

首先了解路由的传递过程;

你的网站向用户发送的HTML文件中的包含的URL链接,即为用户点击该链接后,在用户浏览器地址栏出现的链接;

所以一切的URL优化先从a标签开始;

<a href="/tnys/nys/ys">抬你一手</a>

如果a标签的URL为"/tnys/nys/ys.html";(tnys前面的斜杠/代表根目录)

在用户点击后;

浏览器地址栏出现的即为"www.tainiyishou.cn/tnys/nys/ys.html";

此链接首先发送给web服务器处理,Apache或者Nginx;

而web服务器并不懂你这一串的URL具体的请求是什么;

只会把它当成一串文件路径;

在你网站根目录下按这样的路径寻找文件 tyns->nys->ys.html

然而实际上并不存在这样的路径,只有你放在根目录下的静态文件.js.css之类的实际存在的文件能被找到;

而上面的一串URL只是一串发送给入口文件index.php的请求,分别代表着模块名、控制器名、方法名;

所以需要给web服务器指明方向,配置路由重写

1.以下是Apache的路由重写文件.htaccess,放在入口文件同级目录下

<IfModule mod_rewrite.c>
  Options All
  RewriteEngine On
  RewriteBase /
  #找不到文件夹及文件及执行重写规则
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  #将URL转接至index.php后
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

重写规则:

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

^(.*)$ 为正则匹配语句,匹配所有非空字符,此例匹配到的为tnys/nys/ys.html

$1则指代匹配到的内容,转接到index.php后;

接下来则由PHP处理请求;

2.以下为Nginx重写规则

nginx路由重写在nginx的配置文件中完成

打开配置文件

vim /usr/local/nginx/conf/nginx.conf
server
{
    listen 80;
    #listen [::]:80;
    server_name www.tainiyishou.cn tainiyishou.cn;
    index index.html index.htm index.php;
    #网站根目录
    root  /home/www/tainiyishou/tnys;
    #重写规则
    location / {
        if (!-e $request_filename){
           rewrite ^/(.*) /index.php?s=$1 last;
        }
    }
    #phppathinfo设置
    location ~ \.php {
        set $path_info "";
        set $real_script_name $fastcgi_script_name; 

        if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
            set $real_script_name $1;
            set $path_info $2;
        }

        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
        fastcgi_param SCRIPT_NAME $real_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param SERVER_PORT 80;
        include fastcgi_params;
    }
}

Nginx不支持pathinfo,所以需要手动配置,加上以上的#phppathinfo设置即可

如果你的入口文件index.php放在网站根目录下

即网站根目录为 root /home/www/tainiyishou/tnys

而 index.php在tnys目录下

重写规则只用一条就够了,和Apache同理

   #location / 代表位于根目录下
    location / {
        #如果找不到文件    
        if (!-e $request_filename){
            #则重写路由
           rewrite ^/(.*) /index.php?s=$1 last;
        }
    }

如果你的入口文件index.php放在二级目录下

即网站根目录为 root /home/www/tainiyishou/

而入口文件在 tainiyishou/tnys/index.php

则重写规则为

    #位于根部录下时,即浏览器地址栏为www.tainiyishou.cn/  
    #将路由转到/tnys/index.php下
    location / {
        rewrite / /tnys/index.php last;
    }

    #位于二级目录下时
    location /tnys/ {
        #文件不存在,则将(.*)里的内容转发到/tnys/index.php?s=$1
        if (!-e $request_filename){
           rewrite ^/tnys/(.*) /tnys/index.php?s=$1 last;
        }
    }

路由规则配置好后,接下来的处理内容都将交给PHP,与web服务器无关

如果你想用更精简的路由,比如直接用方法名访问

<a href="/tnys/nys/ys.html">抬你一手</a>
可直接改为
<a href="/ys.html">抬你一手</a>

以上URL代表访问tnys模块下的nys控制器下的ys方法

(此例用的是thinkphp框架)

同时在框架的路由配置文件route.php中加入

return [
    'ys' => 'tnys/nys/ys',
];

即可使用www.tainiyishou.cn/ys.html

访问到原来的www.tainiyishou.cn/tnys/nys/ys.html的内容;

完;

引用原文:http://www.tainiyishou.cn/text/Server/374/18.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值