2012-01-30 88 views
0

我想作以下網址在nginx的Nginx的簡單改寫

comments.php?id=34 

成爲

/comments/34 
/comments/34/ 

我這個嘗試,它的工作原理

rewrite ^/comments/$id/(.*)$ /comments.php?id=$1? last; 

我的問題是,怎麼辦我強制重定向comments.php?id = x到/ comments/id

回答

6
rewrite ^/comments.php$ /comments/$arg_id? permanent; 
+0

非常感謝,非常感謝。更乾淨。 – TheBlackBenzKid 2012-12-12 13:19:23

+0

不客氣。 – chr1x2 2012-12-17 10:23:02

+0

將此更改爲更新的答案,並提供整體更好的解決方案。 – TheBlackBenzKid 2012-12-17 14:26:12

1

根據the documentation,「重寫僅在路徑上運行,而不是參數。」

試試這個:

if ($args ~ id=(.+)){ 
    rewrite comments\.php /comments/$1 last; 
} 
+0

你能解釋一下吧。你的意思是在我的重寫中添加這一點。 – TheBlackBenzKid 2012-01-30 15:50:01

+0

這只是一個建議;如最初發布的那樣,它將用'id/= X參數將任何請求重寫爲'/ comments/X'。將^替換爲'comments.php'應該可以讓你知道你在做什麼(我會編輯以顯示它)。你需要弄清楚如何配合你的'/ comments/$ id/$ userid'請求 - 重寫的順序很重要,但是在我看來你有一個模糊的URL模式。 – pjmorse 2012-01-30 16:10:00

+0

換句話說:'rewrite'指令只能看到''''之前*的請求部分。你需要使用if塊來測試參數。 – pjmorse 2012-01-30 16:11:02