我的客户想要在某些页面上查询字符串(通过将%更改为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]
我在这做错了什么?我只是无法发现它。感谢专家的眼睛!
答案 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