Nginx 自动加斜杠

在 Nginx 里面,目前的 WordPress 是这样子配置 rewrite 的:

location / {
    if (-d wp-admin){
        break;
    }
    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
        rewrite (.*) /index.php;
    }
}

不过如果我们访问:

http://domain.com/wp-admin

注意后面没有斜杠的时候是可以打开的

但是如果再点其他的链接,那么目录引用的层级就会有问题,这时候我们需要加上一个自动加斜杠的机制。

解决方案

在配置文件中location里加入如下代码

if (-d $request_filename) {
    rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

这样再对 http://www.easecloud.cn/wp-admin 请求,nginx 就会进行判断了,如果请求的是一个文件夹,会自动在最后加上 / 符号,如果请求的是一个文件,则不会改变原有 url

接下来对这段代码进行一个解释

  1. if (-d $request_filename),如果请求的是一个文件夹,则为真,进到if语句中执行
  2. rewrite: 执行url重写
  3. ^/(.*)([^/])$ 表示以 / 符号开始并紧跟着任何字符,同时不是以 / 为结束的字符串
  4. http://$host/$1$2/ 表示的重写后的地址,$host是请求的域名,注意为了匹配最后一个字符不为 /,最后一个字符会被分开,被 $2 捕获,将 $1$2 拼起来就是原来完整的字符串;
  5. permanent 表示使用 301 响应码返回永久重定向。

参考原文:http://blog.csdn.net/hhq163/article/details/5851942


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2015/03/nginx-auto-add-slash.html【Nginx 自动加斜杠】

《Nginx 自动加斜杠》有1个想法

  1. 我在猪八戒网上发现了你,用您的注册名称我找到了这个网页,我也是佛山人,我想请您帮我设计一个网站。请联系我 18520996735。

发表评论

电子邮件地址不会被公开。 必填项已用*标注