nginx url自動加斜槓的問題

nginx url自動加斜槓問題及301重定向

時間:2016-02-04 15:14:28來源:網絡
導讀:nginx url自動加斜槓問題及301重定向,URL指向一個目錄而且在最後沒有包含斜槓,會301重定向跳轉,添加server_name或修改訪問重定向。
 
nginx url自動加斜槓問題及301重定向

內部服務器使用nginx,作網站測試之用。不一樣域名使用端口號區分,如www用默認的80端口,其它域名用81,82...php

有時直接在地址欄敲網址,會發現跳轉到localhost.localdomain的狀況。nginx

好比858端口下有個hx目錄,這樣正常訪問:http://192.168.1.158:858/hx/
但若是少打了一個/,如:http://192.168.1.158:858/hx
就會自動跳轉到:http://localhost.localdomain:858/hx/apache

經分析是nginx自動加斜槓的問題:
在某些狀況下(具體可參考 wiki.nginx.org),Nginx 內部重定向規則會被啓動。
例如,當URL 指向一個目錄而且在最後沒有包含「/」時,Nginx 內部會自動的作一個 301 重定向,這時會有兩種狀況:
 服務器

一、server_name_in_redirect on(默認),URL 重定向爲: server_name 中的第一個域名 + 目錄名 + /;
二、server_name_in_redirect off,URL 重定向爲: 原 URL 中的域名 + 目錄名 + /。
If server_name_in_redirect is on, then Nginx will use the first value of the server_name directive for redirects. If server_name_in_redirect is off, then nginx will use the requested Host header.

原配置,沒有加server_name:
 網絡

server {
    listen  858;
}

修改後:
 dom

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+目錄名+/,也對了。網站

泛解析配置:
 url

server{
    listen 80;
    server_name _;
}
 

若是有個phpcheck目錄,有人不當心鏈了http://www.plchome.org/phpcheck這樣一個連接,就會重定向到http://_/phpcheck/。
因此這種在無法指定server_name的狀況下,要加上server_name_in_redirect off。
 spa

server{
    listen 80;
    server_name _;
    server_name_in_redirect off;
}
 

這時,訪問www.plchome.org/phpcheck,就會自動而且正確的跳轉到www.plchome.org/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了,再也不須要指定了。

  相關文章
相關文章
相關標籤/搜索