Nginx
如何告訴 Nginx 不要在選定位置重寫 URL
我正在用 Nginx 中的干淨 url 實現編寫一些 PHP CMS 程式碼。為了提高我的程式碼的安全性,我想
/
使用以下類型重寫我的根目錄中的所有請求:rewrite ^(.*)$ /index.php?q=$1 last;
通過這種重寫,其餘的 php 腳本將無法從使用者端訪問(如果包含在 php 中,它們將只能訪問,對嗎?)。但是,我不想在一個位置重寫請求(對於 mi 那將是我
/static/
),因為我將只提供來自該位置的靜態內容,例如圖像和 css。如何使這種重寫在某些位置不起作用?
理解和使用該
location
指令應該可以解決您的問題。當 location 後面只有一個前綴字元串時(即沒有修飾符,例如 ‘=’ 或 ‘~*’),首先匹配最長的前綴字元串。例如:server { server_name example.org; root /var/www/site; location / { # Configuration A } location /static { # Configuration B }
在此配置中,URL
example.org/static/foo.gif
將匹配配置 B,因為前綴字元串/static
比/
. 同時,example.org/index.php?q=bar
將匹配配置 A,因為這是唯一匹配。然後,您可以讓配置 A 使用 PHP 提供內容,而配置 B 提供靜態內容。
另外,我強烈建議您閱讀Nginx Pitfalls頁面,如果您還沒有的話。它解決了一些與您的情況高度相關的問題,例如對重寫徵稅、安全使用 fastcgi_pass 等等。