2011-04-08 40 views
0

我在IIS6上使用IsapiRewriter,但我認爲這個問題比這更一般。我也很確定沒有辦法做到這一點,但決定我應該問問完全放棄之前知道更多正則表達式的人。htaccess url正則表達式顯示「&」如果反向引用匹配

我匹配的網址尾巴像下面這樣:

^/term1(\?)?(.*) 

其成功匹配

http://domain.tld/term1?utm=1234 

,並在圖案中使用像

^/term1(\?)?(.*) /term1handler.aspx$1$2 [I] 

時很恰當重定向

http://domain.tld/term1?utm=1234 

http://domain.tld/term1handler.aspx?utm=1234 

不過,我的一些重定向的需要重定向到一些與輸出的查詢字符串參數了。現有的重定向看起來像

^/term1 /term1handler.aspx?ID=12345 [I] 

我想找到一個解決方案,可以讓我與符號替換$ 1,如果讓我結束了

http://domain.tld/term1handler.aspx?ID=12345&utm=1234 

有相匹配的有有一正則表達式可以做到這一點?

回答

1

您的規則應該用%{QUERY_STRING},並且必須使用QSA標誌RewriteFlag這樣的:

RewriteCond %{QUERY_STRING} ^(utm=.*)$ 
RewriteRule ^term1/?$ term1handler.aspx?%1 [R,L,QSA,NE] 

QSA標誌將確保追加額外的查詢參數ID=12345從而使複合REQUEST_URI utm=1234查詢參數像/term1handler.aspx?ID=12345&utm=1234

從手動http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

'qsappend | QSA'(查詢字符串追加) 此標誌強制重寫引擎將替換字符串的查詢字符串部分附加到現有字符串,而不是替換它。當您想通過重寫規則將更多數據添加到查詢字符串時使用此選項。

同樣使用NE(無法轉義)來處理查詢參數中特殊字符(;, %, $ etc)的存在。

+0

感謝QSA標誌的指針 - 我從來沒有聽說過那個。 FWIW,最終的解決方案只需要在每個規則中使用QSA標誌 - 我同意一般情況下使用%{QUERY_STRING}條件會更好,但是使用我使用該條件從數據庫生成規則的機制有點麻煩。 – cori 2011-04-10 12:43:30