【问题标题】:replace character in query string via .htaccess通过 .htaccess 替换查询字符串中的字符
【发布时间】:2012-07-10 07:31:55
【问题描述】:

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

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

【问题讨论】:

    标签: .htaccess mod-rewrite query-string


    【解决方案1】:

    你真的很亲密。

    这里的问题是你有一个条件并且你的规则的匹配应该是在一起的。您对前一个 RewriteCond 的反向引用已损坏,因为它是针对 REQUEST_URI不是您想要的 QUERY_STRING

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

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

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

    这里,%1%2 反向引用正确地引用了查询字符串,并且正则表达式模式满足了 URI 中的 SpecialPage 条件。

    【讨论】:

    • 好的,我想我遵循这个,但是我得到一个内部服务器错误。我可以有这个:domain.com/SpecialPage?x=y%ff%dd%gqf312%ggg,我的客户希望那些 % 是“A”,例如domain.com/SpecialPage?x=yAffAddAgqfe312Aggg
    • 那些是 URL 编码的转义(%ff、%dd 等),所以当它们到达重写引擎时,它们将被解码。
    • 正确。这些是编码的,但我希望(我的客户是)他们仍然可以操纵;非常感谢您的帮助!
    【解决方案2】:

    重定向查询字符串


    重写引擎开启
    RewriteCond %{QUERY_STRING} ^(.)=(.)$
    RewriteRule ^(.)?(.)$ /$1--%0? [R=301,L]

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 2014-11-22
      • 2023-02-23
      相关资源
      最近更新 更多