7

我的客户想要在某些页面上修改查询字符串(通过将 % 更改为 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]

我在这做错了什么?我就是看不出来。感谢专家的眼睛!

4

2 回答 2

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反向引用正确地引用了查询字符串,并且SpecialPageURI 中的条件符合正则表达式模式。

于 2012-07-11T03:43:55.297 回答
0

重定向查询字符串


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

从网址:http://localhost/sholay-slide.jsp?slide=2
到网址:http://localhost/sholay-slide.jsp--slide=2

于 2017-11-10T07:25:50.443 回答