2012-10-22 69 views
1

我想知道是否有人可以提供帮助。我有一个重定向文件,用于在客户在网站上搜索特定字词时指向特定页面。除了当我尝试将英镑货币符号(£)传递给搜索字符串时,这一切都可以正常工作,因此例如,如果我想将客户发送到名为'http:// www'的页面, mysite.com/offers/3-for-20.list”当他们搜索‘3 20£’我有以下规则设置: -apache mod_rewrite货币

RewriteCond %{QUERY_STRING} ^search\=(3\+for\+£20)$ [NC] 
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301] 

我已经尝试了上面没有成功,并有无法找到任何帮助或任何转义字符,这将有助于我这一点。 我没有收到任何错误页面,事实上它正在成功完成搜索,但没有指向请求的页面,而只是做了一个查询,就好像没有设置重定向一样,再加上日志文件显示没有错误,但搜索结果为' ...搜索= 3 +为+%C2%A320' HTTP/1.1 200

我还试图把上面到重定向规则具有相同的结果,即

RewriteCond %{QUERY_STRING} ^search\=(3\+for\+C2%A320)$ [NC] 
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301] 

没有人有任何关于如何做到这一点的想法。

感谢您的帮助。

回答

0

与URI不同,查询字符串的处理方式与URL转义相同。该URI是通过规则被放在之前转义,但查询字符串变量是左转义,因此:

search=3 for £20 

%{QUERY_STRING}可变左转义:

search=3+for+%C2%A320 

此外,当您backrefernce的比赛在你的重写规则,mod_rewrite的想逃避查询字符串再次,所以你需要告诉它不要使用NE标志:

RewriteCond %{QUERY_STRING} ^search=(3\+for\+%C2%A320)$ [NC] 
RewriteRule ^.* http://www.mysite.com/offers/3-for-20.list?s=%1 [L,R=301,NE] 

(您的第二次尝试在C2之前丢失了%

+0

oops错过了!这已经完成了技巧感谢您的帮助:) – Penguin