2011-01-25 141 views
4

我對我的網站的某個目錄有一些特定的需求。我需要改變htaccess將子目錄名重寫爲查詢字符串參數

/thisDirectory/subDirectory 

/thisDirectory?param=subDirectory 

我在成功創建一個htaccess文件,將做到這一點的問題才能通過。我已經嘗試了幾種不同的東西,但我認爲這是最接近:

RewriteEngine On 
RewriteRule ^/directory/(.*)\??(.*)$ /directory/?page=$1&$2 

我一直面臨着各種500服務器錯誤,無限循環重定向,等等等等,任何幫助將不勝感激,謝謝!

回答

3

我很驚訝,這確實在所有的工作在每個目錄範圍內,你將不得不剝離每從圖案-directory路徑前綴:

當使用在.htaccess重寫引擎文件的每目錄前綴(其總是爲特定的目錄相同的)自動除去是用於RewriteRule模式匹配和自動添加後任何親屬(不是開始機智h斜線或協議名稱)替換會遇到規則集的結尾。

在文檔根目錄,這將是的情況下,領先/和規則是這樣的:

RewriteRule ^directory/(.*)\??(.*)$ /directory/?page=$1&$2 

但除此之外,RewriteRule只能檢查URI路徑,而不是查詢;你需要RewriteCond來做到這一點。所以,試試這個:

RewriteRule ^directory/(.+)$ /directory/?page=$1 [QSA] 

這裏.+代替.*應避免無限遞歸作爲.*匹配的一切,甚至是空字符串(/directory/後,這將是空的路徑段的情況下)。而QSA flag將自動將請求的URI查詢附加到新的URI。

1

經過很多挫折...我認爲這個問題是試圖做一個相同的「目錄」重寫(雖然我認爲[L]會照顧它不循環...但這似乎並不情況就是如此)。我改變了它被改寫到目錄的名稱,似乎工作...

RewriteBase /my/base/rewrite/ 
RewriteRule ^directory/(.*)$ newDirectory/?page=$1 [L] 
相關問題