apache mod_rewrite货币

时间:2012-10-22 15:57:53

标签: apache .htaccess mod-rewrite url-rewriting escaping

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

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

我已经尝试了上述内容但没有成功,并且无法找到任何帮助或任何可以帮助我的转义字符。 我没有得到任何错误页面,因为它正在成功完成搜索,但没有指向请求的页面而只是执行查询,好像没有设置重定向,加上日志文件显示没有错误,但搜索结果为'。 ..search = 3 + for +%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]

有没有人对如何做到这一点有任何想法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

与URI不同,就URL转义而言,查询字符串的处理方式有所不同。 URI在通过规则之前未转义,但查询字符串变量未转义,因此:

 search=3 for £20

未转义为%{QUERY_STRING}变量:

search=3+for+%C2%A320

此外,当您在重写规则中反向匹配时,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