1

我想知道是否有人可以提供帮助。我设置了一个重定向文件,以在客户在网站上搜索特定单词时将其指向特定页面。除了我尝试将 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]

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

谢谢你的帮助。

4

1 回答 1

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]

%(您的第二次尝试在之前缺少 a C2

于 2012-10-22T17:46:46.390 回答