我们要达到的目的
访问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
接下来对这段代码进行一个解释
if (-d $request_filename)
,如果请求的是一个文件夹,则为真,进到if语句中执行rewrite: 执行url重写
^/(.*)([^/])$
表示以/
符号开始并紧跟着任何字符,同时不是以/
为结束的字符串http://$host/$1$2/ 表示的重写后的地址,$host是请求的域名,注意为了匹配最后一个字符不为
/
,最后一个字符会被分开,被 $2 捕获,将 $1$2 拼起来就是原来完整的字符串;permanent 表示使用 301 响应码返回永久重定向。
============================================================
下面是Apache的实现方法
在伪静态规则里加上
RewriteEngine On RewriteCond %{REQUEST_URI} !^/(.*)/ RewriteRule ^(.*)$ $1/ [L,R=301]