2016-11-02 52 views
0

我在Windows服務器上使用Helicon Ape來創建htaccess文件。從htaccess刪除括號(Helicon Ape)

最初,條件更大的一部分,我有這個條件設置爲返回403,如果URL包含()。然而,它是造成假陽性中的那個最終mailchimp跟蹤代碼的情況下得到包裹在()

RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR] 

例如在下面的URL

http://domain.com/page/11/page-name?ct=t(Newsletter_Tracking)

作爲替代,我試圖刪除括號並重定向到「清理版本」。

我嘗試了幾個不同的東西,我發現在SO但沒有工作。

到目前爲止,我可以得到的工作最接近的事是這樣的:

RewriteCond %{REQUEST_URI} [\(\)]+ [OR] 
RewriteCond %{QUERY_STRING} [\(\)]+ 
RewriteRule ^(.*)[\(]+([^\)]*)[\)]+(.*)$ $1$2$3 [R=301,L] 

與上面的代碼的問題是,如果()是在URL而不是查詢工作串。它不重定向和清理查詢字符串。

所以這會工作: http://domain.com/page/11/pag(e-name)

但這並不: http://domain.com/page/11/page-name?ct=t(Newsletter_Tracking)

你的援助表示讚賞

謝謝。

回答

1

您可以使用以下規則:

RewriteCond %{THE_REQUEST} /page/11/page-name\?ct=t\(Newsletter_Tracking\)\sHTTP [NC] 
RewriteRule^%{REQUEST_URI}? [L,R] 

如果查詢字符串是動態的,請嘗試:

RewriteCond %{THE_REQUEST} /page/11/page-name\?ct=.+\(.+\)\sHTTP [NC] 
RewriteRule^%{REQUEST_URI}? [L,R] 
+0

謝謝。但是這太具體了,這會導致問題。看到您在RULE中使用REQUEST_URI後,我想出了一個可行的解決方案 – imvain2

1

使用@starkeen的例子,我能創造一個有效的解決方案。

該代碼處理與URL分開的查詢字符串。它會清除URL但刪除查詢字符串。

RewriteCond %{REQUEST_URI} [\(\)]+ 

RewriteRule ^(.*)[\(]+([^\)]*)[\)]+(.*)$ $1$2$3 [R=301,L] 

RewriteCond %{QUERY_STRING} [\(\)]+ 

RewriteRule^%{REQUEST_URI}? [R=301,L]