lit*_*red 6 .htaccess mod-rewrite query-string
我的客户想要在某些页面上查询字符串(通过将%更改为A).
例如,我可以通过以下方式在所需页面上完全删除查询字符串:
RewriteCond %{QUERY_STRING} !=""
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1? [R=301,L] #remove query string
Run Code Online (Sandbox Code Playgroud)
这是我认为应该删除查询字符串上的%并替换为A,但它不是:
RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2 [L]
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我只是无法发现它.感谢专家的眼睛!
你真的很接近。
这里的问题是你有一个条件并且你的规则的匹配应该在一起。您对前一个的反向引用RewriteCond已损坏,因为它是针对REQUEST_URI而不是您想要的QUERY_STRING 。
RewriteCond %{REQUEST_URI} ^/SpecialPage(.*)
RewriteRule ^(.*)$ /$1?%1A%2 [L]
Run Code Online (Sandbox Code Playgroud)
此处,%1(.*)反向引用与 URI末尾的匹配/SpecialPage。查询字符串匹配的反向引用会丢失,而这正是您真正想要的。您可以组合条件以将 REQUEST_URI 与以下中的正则表达式模式相匹配RewriteRule:
RewriteCond %{QUERY_STRING} ^(.*)\%(.*)$
RewriteRule ^SpecialPage(.*)$ /SpecialPage$1?%1A%2 [L]
Run Code Online (Sandbox Code Playgroud)
此处,%1和%2反向引用正确引用查询字符串,并且正则SpecialPage表达式模式满足 URI 中的条件。