今天遇到的问题与文中类似,微信开发中,遇到url目录名后没有斜杠报错重定向uri错误,遂查了下资料,发现是因为没有斜杠的话会重写url并重定向,如果 下文中的配置 off 是取当前url中的域名,如果是on则取配置文件中的域名
出现的问题后来解决了,其实是因为作了负载负载,重写url的时候在域名后面跟上了端口号.所以微信后台配置的回调域名不正确了.去掉端口号即可
内部服务器使用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自动加斜杠的问题相关,试了下,果然是的。
1、server_name_in_redirect on(默认),URL 重定向为: server_name 中的第一个域名 + 目录名 + /;
2、server_name_in_redirect off,URL 重定向为: 原 URL 中的域名 + 目录名 + /。
来源: http://www.itlearner.com/article/4778
来自官方文档
原配置,没有加server_name:
server {
listen 858;
}
修改后:
server {
listen 858;
server_name 192.168.1.158;
}
或:
server {
listen 858;
server_name_in_redirect off;
}
此问题解决。访问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_redirect on,因此原配置访问hx目录时,会重定向到localhost.localdomain/hx/了。
第一种修改方法,加了server_name,那就跳转到server_name + 目录名 + /,对了。
第二种修改访问,重定向为:访问的URL+目录名+/,也对了。
另,如果使用了范解析,一般会这个配置:
server{
listen 80;
server_name _;
}
如果有个phpcheck目录,有人不小心链了http://www.9enjoy.com/phpcheck这样一个链接,就会重定向到http://_/phpcheck/。
所以这种在没法指定server_name的情况下,要加上server_name_in_redirect off。
server{
listen 80;
server_name _;
server_name_in_redirect off;
}
这时,访问www.9enjoy.com/phpcheck,就会自动并且正确的跳转到www.9enjoy.com/phpcheck/了。
=================================================
晚上升级一台服务器的nginx版本时,在changes里看到:
Changes with nginx 0.8.48 03 Aug 2010
*) Change: now the "server_name" directive default value is an empty
name "".
Thanks to Gena Makhomed.
*) Change: now the "server_name_in_redirect" directive default value is
"off".
从nginx 0.8.48起server_name_in_redirect已经默认为off了,不再需要指定了。