2014-10-17 225 views
2

我遇到過類似的問題,例如this one,並在mod_rewrite tutorials上找到類似的說明。在.htaccess中刪除查詢字符串中的特殊字符

我已經決定,我需要沿着

RewriteRule ^(.*)<(.*)$ /$1$2 [L,R=301] 
RewriteRule ^(.*)>(.*)$ /$1$2 [L,R=301] 

這適用於http://domain.com/<>線的東西,但它確實工作http://domain.com?a=<>

我還添加以下,在我試圖從查詢字符串中刪除這些字符:

RewriteCond %{QUERY_STRING} ^(.*)<(.*)$ 
RewriteRule ^(.*)$ /$1?%1%2 [L,R=301] 
RewriteCond %{QUERY_STRING} ^(.*)>(.*)$ 
RewriteRule ^(.*)$ /$1?%1%2 [L,R=301] 

這沒有ch任何東西。我也嘗試在正則表達式中嘗試轉義<和>(即^(.*)\<(.*)$)。

,我試圖達到的最終結果是有

http://domain.com/<whatever>轉成http://domain.com/whatever,並

http://domain.com/a=<whatever>&b=whatever轉成http://domain.com/a=whatever&b=whatever

回答

2

<被編碼爲%3C>被編碼爲%3E瀏覽器。因此,有你的規則是這樣的:

RewriteCond %{QUERY_STRING} ^(.*?)(?:%3C|%3E)(.*)$ 
RewriteRule ^(.*)$ /$1?%1%2 [L,R=302,NE] 

這將重定向到http://domain.com/?a=<whatever>&b=whateverhttp://domain.com/?a=whatever&b=whatever

+0

我敢發誓該編碼發生_after_的的.htaccess被考慮在內。很高興知道這不是在RewriteCond上的情況(或者它只是與查詢字符串?) – jperezov 2014-10-17 15:04:48

+3

是的,我相信它只是與查詢字符串的情況下。 – anubhava 2014-10-17 15:06:59

+1

完美答案!今天學到了關於查詢字符串編碼時序的新內容。謝謝! – Concept211 2017-06-22 09:55:16