2009-06-30 49 views
1

我在PHP方面很有經驗,但我並不完全使用mod_rewrite(雖然我應該)。我想問的是,是否有可能通過一個重寫規則傳遞許多變量。我可以通過mod_rewrite將匹配的變量傳遞給新的URL嗎?

例如,是否有可能改寫這個:

localhost/test.php?id=1&name=test&var1=3 

到這一點:

localhost/mysupertest/ 

,並使用不同的值相同的重寫規則?

localhost/test.php?id=5&name=another_name&var3=42 

localhost/mysupertest/ 

我知道它可以使用Ajax,餅乾,會話或POST變量來實現,但我真的想用GET變量。

+1

你真的想將`/test.php?id = 1&name = test&var1 = 3`的請求重定向到`/ mysupertest /`嗎?或者換句話說,`/ mysupertest /`到`/test.php?id = 1&name = test&var1 = 3`的請求? – Gumbo 2009-07-01 16:06:47

回答

1

我不完全知道你是問什麼,但你可能應該使用[QSA]選項mod_rewrite的,它將追加從'?'開始的所有URL參數。例如:

RewriteRule ^mysupertest/? test.php [QSA] 

查看this question瞭解更多詳情。

0

是的,這是可能的。任何你可以匹配你的正則表達式可以重寫爲任何網址。無論何時,當你將正則表達式字符串的一部分放在括號()內時,它就成爲一個可以在重寫時使用的變量。

你會想是(我認爲):?

重寫規則test.php的\ ID = [0-9] + &名= + & VAR1 = [0-9] + mysupertest/

1

絕對有可能。像這樣的東西會做:

RewriteRule test.php\?(.*)$ mysupertest/ 

但是,如果你這樣做,因爲它是有效一回事訪問本地主機/ mysupertest直接,沒有查詢字符串數據,你會失去你的變量。如果你想保留這些變量,可能是一個REST風格的url,你可以使用back-references來重寫它們。正如John所提到的,反向引用只是一組括號,它們內部的任何匹配成爲數字排序方案中的一個變量。

RewriteRule test.php\?id=(.*)&name=(.*)&var3=(.*) mysupertest/$1/$2/$3 

上述原則,訪問test.php?id=567&name=test&var3=whatever將是一樣的訪問mysupertest/567/test/whatever

0

QUERY_STRING不是URI的一部分。從RewriteRule的文檔:

注:查詢字符串

如果你想對陣的主機名,端口或查詢字符串,分別使用RewriteCond%{HTTP_HOST}%{SERVER_PORT},或%{QUERY_STRING}變量。

相關問題