今天遇到的問題與文中類似,微信開發中,遇到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了,不再需要指定了。