看到网上很多人都再说,在访问带目录的url时,nginx不会自动加斜线,有的人加了rewrite来实现,有的人设置 server_name_in_redirect off来实现。我测试了下带目录时的情况,发现斜线是可以自动加上的,其他情况我测试了后再来补全吧。网上的文章不要随便拿来用,至少也要先测试下,毕竟nginx也是在不断发展。bug也一定在不断被修复。
经过进一步测试,发现在访问带目录的url时,nginx会自动加斜线,其实是在内部自动做了一个301跳转,加了斜线。可以用httpwatch,或者 curl -I http://.../dir来测试。
这一切都跟这些有关:
在某些情况下(具体可参考 wiki.nginx.org),Nginx 内部重定向规则会被启动,例如,当 URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301 重定向,这时会有两种情况:
1、server_name_in_redirect on(默认),URL 重定向为: server_name 中的第一个域名 + 目录名 + /;
2、server_name_in_redirect off,URL 重定向为: 原 URL 中的域名 + 目录名 + /。
以上信息应该是在做rewrite时多注意,servername和alias。可见,nginx现在是会自动加斜线的。欢迎大家也都发表下自己的看法。
新闻热点
疑难解答