2015-07-02 40 views
0
http{ 
    server { 
     listen 80; 
     server_name example.com; 
     rewrite_log on; 
     root /etc/nginx/html/mysite; 
     location ^~ /me/ { 
      rewrite ^/me/(.*)$ /etc/nginx/html/mysite/$1.html; 
     } 
    } 
} 

以上,當我提出請求http://example.com/me/allnginx.conf的rewrite沒有得到觸發

我希望它通過/etc/nginx/html/mysite/all.html

放送,但要求去/etc/nginx/html/mysite/me/all忽略重寫不工作,沒有任何關於日誌中的重寫錯誤(只是404未找到)。

回答

0

您正在將虛擬主機的root指定爲/etc/nginx/html/mysite(第6行)。在您的重寫規則中,再次指定整個路徑/etc/nginx/html/mysite/$1.html(第8行)。 nginx所做的是將重寫規則的目標(/etc/nginx/html/mysite/$1.html)附加到虛擬主機的根目錄(/etc/nginx/html/mysite)。在你比如這導致搜索的文件:

/etc/nginx/html/mysite/etc/nginx/html/mysite/all.html 

這些文件不存在,並導致404 更正規則使目標相對於root相對路徑,如:

http{ 
    server { 
     listen 80; 
     server_name example.com; 
     rewrite_log on; 
     root /etc/nginx/html/mysite; 
     location ^~ /me/ { 
      rewrite ^/me/(.*)$ /$1.html; 
     } 
    } 
} 

請記住,您可以通過閱讀nginx錯誤日誌(默認設置爲/var/log/nginx/error.log)來獲得有關這些錯誤的更多信息。在你情況下,將已經聲明是這樣的:

「/usr/share/nginx/html/mysite/usr/share/nginx/html/mysite/all.html」失敗(2:沒有這樣的文件或目錄),客戶端:127.0.0.1,server:localhost,請求:「GET/me/all HTTP/1.1」,主機:「localhost」