首页 > 服务器维护 > nginx

Nginx / Apache 访问目录自动加斜杠 伪静态规则

发布时间:2016-1-14 01:55

我们要达到的目的

访问http://www.zhuxianfei.com/new 的时候 浏览器自动跳转到 http://www.zhuxianfei.com/new/


因为本站是用的静态目录,生成了静态的索引文件index.html 

所以默认就是这样自动跳转的


如果你是一个用伪静态来做目录的时候,是有没有后面的斜杠都可以直接访问而不会跳转的

这个用过wordpress的都深有体会

如果我们访问:


http://zhuxianfei.com/wp-admin


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

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


解决方案

在伪静态配置文件中里加入如下代码

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

这样再对http://zhuxianfei.com/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 响应码返回永久重定向。

============================================================

下面是Apache的实现方法

在伪静态规则里加上

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(.*)/
RewriteRule ^(.*)$ $1/ [L,R=301]


标签:[!--infotagslink--]

您可能感兴趣的文章: