Nginx

如何告訴 Nginx 不要在選定位置重寫 URL

  • October 29, 2016

我正在用 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
   }

在此配置中,URLexample.org/static/foo.gif將匹配配置 B,因為前綴字元串/static/. 同時,example.org/index.php?q=bar將匹配配置 A,因為這是唯一匹配。

然後,您可以讓配置 A 使用 PHP 提供內容,而配置 B 提供靜態內容。

另外,我強烈建議您閱讀Nginx Pitfalls頁面,如果您還沒有的話。它解決了一些與您的情況高度相關的問題,例如對重寫徵稅、安全使用 fastcgi_pass 等等。

引用自:https://serverfault.com/questions/597858