nginx url自动加斜杠及301重定向的问题
nginxurl自动加斜杠问题及301重定向,URL指向一个目录并且在最后没有包含斜杠,会301重定向跳转,添加server_name或修改访问重定向。
nginxurl自动加斜杠问题及301重定向
内部服务器使用nginx,做网站测试之用。不同域名使用端口号区分,如www用默认的80端口,其它域名用81,82...
有时直接在地址栏敲网址,会发现跳转到localhost.localdomain的情况。
比如858端口下有个hx目录,这样正常访问:http://192.168.1.158:858/hx/
但如果少打了一个/,如:http://192.168.1.158:858/hx
就会自动跳转到:http://localhost.localdomain:858/hx/
经分析是nginx自动加斜杠的问题:
在某些情况下(具体可参考wiki.nginx.org),Nginx内部重定向规则会被启动。
例如,当URL指向一个目录并且在最后没有包含“/”时,Nginx内部会自动的做一个301重定向,这时会有两种情况:
1、server_name_in_redirecton(默认),URL重定向为:server_name中的第一个域名+目录名+/;
2、server_name_in_redirectoff,URL重定向为:原URL中的域名+目录名+/。
Ifserver_name_in_redirectison,thenNginxwillusethefirstvalueoftheserver_namedirectiveforredirects.Ifserver_name_in_redirectisoff,thennginxwillusetherequestedHostheader.
原配置,没有加server_name:
server{ listen858; }
修改后:
server{ listen858; server_name192.168.1.158; }
或:
server{ listen858; server_name_in_redirectoff; }
此问题解决。访问http://192.168.1.158:858/hx可以正常跳转到http://192.168.1.158:858/hx/了。
分析:
服务器的hostname是localhost.localdomain,当没有设置server_name时,server_name就变成hostname了。
默认又是server_name_in_redirecton,因此原配置访问hx目录时,会重定向到localhost.localdomain/hx/了。
第一种修改方法,加了server_name,那就跳转到server_name+目录名+/,对了。
第二种修改访问,重定向为:访问的URL+目录名+/,也对了。
泛解析配置:
server{ listen80; server_name_; }
如果有个phpcheck目录,有人不小心链了http://www.plchome.org/phpcheck这样一个链接,就会重定向到http://_/phpcheck/。
所以这种在没法指定server_name的情况下,要加上server_name_in_redirectoff。
server{ listen80; server_name_; server_name_in_redirectoff; }
这时,访问www.plchome.org/phpcheck,就会自动并且正确的跳转到www.plchome.org/phpcheck/了。
晚上升级一台服务器的nginx版本时,在changes里看到:
Changeswithnginx0.8.4803Aug2010 *)Change:nowthe"server_name"directivedefaultvalueisanempty name"". ThankstoGenaMakhomed. *)Change:nowthe"server_name_in_redirect"directivedefaultvalueis "off".
从nginx0.8.48起server_name_in_redirect已经默认为off了,不再需要指定了。
以上所述是小编给大家介绍的nginxurl自动加斜杠及301重定向的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!