2012-04-02 65 views
1

資訊NGINX重寫沒有IF語句

我做在NGINX一些重寫清理在我的web應用程序的幾個網址。

我正在做的第一個重寫是用於處理分頁[例如, http://domain.com/p/2],第二個用於用戶配置文件區域[例如, http://domain.com/username]

我使用的重寫如下:

rewrite ^/p/(.*)$ /index.php?p=$1; # paging rewrite from /p/<page_number> 
rewrite ^/(.*)$ /user.php?user=$1; # user page rewrite from /<username> 

問題

我有應該是很容易發現的問題。由於我使用/ p /和/用戶名,重寫不會區分這兩者,並最終將thinking/p/2作爲用戶頁面傳遞。

我知道我需要運行一個/ p /的檢查,並以不同於其他任何重寫的方式對待它,但在我的閱讀中,我已閱讀過IF語句,如果可能的話,由於潛在的意外結果,

問題

,這是將IF語句就可以使用,如果是的話你會看起來像要確保我檢查,對來自用戶的正常請求的情況下。如果有一種方法可以在沒有IF語句的情況下進行檢查,我希望能夠通過一些見解來實現這一點。

感謝任何幫助。

乾杯,

賈裏德

回答

4

這是最後的標誌是什麼。只需將其添加到第一次重寫中,如果匹配,則不會評估第二次重寫:

rewrite ^/p/(.*) /index.php?p=$1 last; 
rewrite ^/(.*) /user.php?user=$1; 
+0

只是我需要的提示。對'last'和'break'做一些研究。乾杯。 – Jared 2012-04-04 05:34:52

+0

'last'將執行到目標的內部重定向,而'break'將簡單地停止所有的重寫處理,將$ uri設置爲目標,然後進入下一個請求處理階段。 – kolbyjack 2012-04-04 13:30:47