2013-11-26 31 views
2

我已經使用在.htaccess下面的代碼,如何在'pagename/id'的.htaccess中設置重寫規則?

Options +FollowSymlinks 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+?)/?$ $1.php [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^user-projects/([0-9]+)/?$ user-projects.php?uid=$1 [L,QSA] 

這上面的代碼工作的URL mydomain.com/pagename但如果URL中含有mydomain.com/user-projects/1它給'500內部服務器錯誤'

有人可以告訴我我在哪裏做錯了嗎?

謝謝。

+0

爲什麼在最後的問號? –

+0

我也用這個'重寫規則^用戶項目/([0-9] +)$用戶projects.php?UID = $ 1 [L,QSA]'但不工作的 – Sachin

+0

我就是這樣,一旦開始創建_pretty URLs_,但很快就改變了我的想法,把邏輯放在路由器和基於_MVC_的框架中。 –

回答

2

的原因,你得到一個500錯誤是因爲你申請的第一條規則就是一味添加php擴展到不管它是不是一個文件。所以/user-projects/1/匹配第一條規則,並得到一個PHP擴展到最後,然後同樣的事情再次發生,並再次。

您應該交換兩個規則的順序,或使你的php擴展規則更精確:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} ^/(.+?)/?$ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteCond ^(.+?)/?$ $1.php [L] 

,檢查第一,如果你添加一個.php後綴結尾,它實際上指向存在的文件。

+0

是的,它的工作原理,我交換了規則的順序,謝謝。 – Sachin

0

你必須在你的統治結束一個forwardslash,所以它會匹配

mydomain.com/user-projects/1/

但不

mydomain.com/user-projects/1

你也不需要問號,所以正確的規則是

RewriteRule ^user-projects/([0-9]+)$ user-projects.php?uid=$1 [L,QSA]

+0

我也用這個重寫規則^用戶項目/([0-9] +)$用戶projects.php?UID = $ 1 [L,QSA]但不工作的 – Sachin

+0

可以檢查Apache的錯誤日誌?這應該告訴你什麼導致500錯誤 –