2012-03-03 46 views
0

我想重定向從/orders/whatever/?n=4

到:

/orders/?shopURL=whatever&n=4 

我設法重定向到正確的目錄,但我失去了傳遞的變量。

這是我目前的規則:

RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L] 

回答

1

如果要執行一個查詢字符串的存在,使用方法:

RewriteCond %{QUERY_STRING} (\bn=\d+\b) 
RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1&%1 [L] 

否則,您可以使用下面沒有的RewriteCond:

RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1 [L,QSA] 
+2

除了'(n = \ d *)'也會匹配'ban = 234G'。在這種情況下使用'(\ bn = \ d * \ b)'。 – TerryE 2012-03-03 09:59:07

+0

因爲\ d只會匹配數字,所以您最好避免\ b,但將它添加到前面是絕對必要的。我會更新我的答案來使用它。 (我從來沒有真正使用\ b之前,無法想象如何防止'禁令'與'n'的情況,所以謝謝指出!) – 2012-03-03 13:26:58

+0

是的,大多數開發人員沒有意識到,Apache的正則表達式引擎是**完整的** PCRE實現。所以所有的好東西都像元字符,非貪婪匹配,前瞻/隱藏斷言,\ n變量都可以工作。 :-) – TerryE 2012-03-03 14:06:23

0

你重寫規則看起來很普通的,因爲雖然它會重定向幾乎每一頁。

對於正則表達式,我不是那麼棒,所以我會把這些留給你或其他人。但是,在重寫規則末尾需要一些內容來捕獲參數,然後將其附加到新URL的末尾。

RewriteRule ^([\w\d]+)/(somethinghere)$ /orders/?shopURL=$1&$2 [L] 
1

QSA標誌RewriteRule將保留現有的查詢字符串字段。

相關問題