Nginx目录自动加斜杠
  • 分类:web
  • 发表:2012-09-06
  • 围观(3,127)
  • 评论(0)

最近调整了一个网站的结构,把原来 bbs.domain.com 的论坛,移到 主域名下的 bbs 目录。弄好后一切正常,只有一个问题,就是如果我访问 http://www.domain.com/bbs/ 就可以显示出地址,但如果我访问 http://www.domain.com/bbs 结果却提示说找不到所需要的页面。

发生这种情况,是因为 nginx不会自动判断请求的是一个文件还是一个目录,所以不会自动在请求的最后加上一个斜杠 / ,解决方法为:

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

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

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

接下来对这段代码进行一个解释
1、if (-d $request_filename),如果请求的是一个文件夹,则为真,进到if语句中执行
2、rewrite 是执行 url 重写操作。
3、^/(.*)([^/])$ 表示以/符号开始并紧跟着任何字符,同时不是以/为结束的字符串,在我的url 中,(.*) 表示的 bbs。
4、http://$host/$1$2/ 表示的重写后的地址,$host 是请求的域名,$1 是前面第一个括号里的内容,在我的 url 里就是 bbs。
5、permanent 表示,返回永久重定向的 HTTP 状态 301。

共有 0 条评论

Top