我在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)
感谢您的协助
谢谢。
答案 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]