2012-11-03 73 views
4

傳遞$ _GET變量到虛擬目錄,我有以下.htaccess重寫規則低於該工程將虛擬目錄參數,例如:通過的.htaccess

www.example.com/usa/ny/nyc得到由PHP解釋爲www.example.com/index.php?path=usa/ny/nyc

我似乎無法弄清楚的是我將如何更改我的regex以處理虛擬目錄本身的參數。例如,我想:

www.example.com/usa/ny/nyc/?display=off&settings=none被PHP看作www.example.com/index.php?path=usa/ny/nyc&param=display:off,settings:none

是什麼讓它更棘手是參數不會總是我在上面的例子中使用的那兩個選項,它們會動態改變。有關如何完成此任務的任何想法或建議?

RewriteRule ^/?([a-zA-Z_\-/]+)$ index.php?path=$1 [L] 
+0

是否需要以新格式重寫附加參數,而不是將它們作爲附加'_GET'參數傳遞? – jheddings

+0

絕對不是!我可以以普通格式顯示其他參數,我只是使用了這種格式,因爲我認爲在我的PHP腳本中使用這種格式會比較困難,因爲反正我必須爆炸字符串()。 –

回答

2

假設你要傳遞的查詢字符串修改,你可以使用[QSA](查詢字符串追加)選項,如下所示:

RewriteRule /(.+)$ /index.php?path=$1 [L,QSA] 

你可以找到的選項QSAhere文檔。從該文檔:

隨着[QSA]標誌,對於/頁/ 123一個= 2將被映射到 /page.php?page=123 &一個= 2的請求?沒有[QSA]標誌,同樣的 請求將被映射到/page.php?page=123 - 也就是說,現有的 查詢字符串將被丟棄。

因此,您的PHP腳本會將所有參數看作標準的_$_GET參數,而不需要做任何其他修改。

如果您希望治療結果更像是一個典型的路徑元素,你可以使用以下命令:

RewriteRule /(.+)$ /index.php/$1 [L,QSA] 

在上述情況下,您的查詢字符串將仍然被追加,不過您需要使用$_SERVER['PATH_INFO']明確處理路徑。

+0

謝謝!這正是我想要做的。 –

+0

實現QSA標誌後,我注意到當我訪問一個沒有結尾斜槓的虛擬目錄時,它將URL重定向爲「localhost:8888 /?path =/Application/MAMP/project」。任何想法如何避免這種情況? –

+0

你認爲這個結果看起來像什麼? – jheddings