通过.htaccess替换查询字符串中的字符

时间:2012-07-10 18:43:38

标签: .htaccess mod-rewrite query-string

我的客户想要在某些页面上查询字符串(通过将%更改为A)。

例如,我可以通过以下方式在所需页面上完全删除查询字符串:

RewriteCond %{QUERY_STRING} !="" 
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*) 
RewriteRule ^(.*)$ /$1? [R=301,L] #remove query string

以下是我认为应该删除查询字符串上的%并替换为A但不是:

RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2  [L]

我在这做错了什么?我只是无法发现它。感谢专家的眼睛!

2 个答案:

答案 0 :(得分:1)

你真的很亲近。

这里的问题是你有一个条件,你的规则的匹配应该在一起。您对之前RewriteCond的反向引用已被破坏,因为它是 REQUEST_URI QUERY_STRING 就像您想要的那样。

RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2  [L]

此处,%1 反向引用与(.*) URI末尾的/SpecialPage相匹配。查询字符串匹配的反向引用会丢失,这就是您真正想要的。您可以组合条件以使REQUEST_URI与RewriteRule中的正则表达式模式匹配:

RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteRule ^SpecialPage(.*)$ /SpecialPage$1?%1A%2  [L]

此处,%1 %2 反向引用正确引用查询字符串,并且正则表达式模式满足URI中的SpecialPage条件。< / p>

答案 1 :(得分:0)

重定向查询字符串


        RewriteEngine On         RewriteCond%{QUERY_STRING} ^(。)=(。)$
        RewriteRule ^(。)?(。)$ / $ 1 - %0? [R = 301,L]
  

来自网址:http://localhost/sholay-slide.jsp?slide=2
致Url:http://localhost/sholay-slide.jsp--slide=2