从htaccess(Helicon Ape)删除括号

时间:2016-11-02 15:24:03

标签: .htaccess helicon-ape

我在Windows服务器上使用Helicon Ape来创建htaccess文件。

最初,作为一组更大条件的一部分,如果url包含(),我将此条件设置为返回403。但是,如果mailchimp跟踪代码最终被包裹在()

中,则会导致误报
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]

例如,在以下网址

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

作为替代方案,我试图删除括号并重定向到&#34;已清理的版本&#34;。

我尝试了一些我在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)

感谢您的协助

谢谢。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

使用@starkeen的例子,我能够创建一个可行的解决方案。

此代码处理与URL分开的查询字符串。它会清除URL但会删除查询字符串。

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

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

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

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