【问题标题】:mod_rewrite RewriteRule pattern match fails when query string is URL-encoded当查询字符串是 URL 编码时,mod_rewrite RewriteRule 模式匹配失败
【发布时间】:2012-04-14 16:12:30
【问题描述】:

我正在尝试使用 mod_rewrite RewriteRule,并且在我的 RewriteRule 中,我正在尝试匹配具有如下查询字符串的 URL:

http:///myfakeoam/obrareq.cgi?....

我的 RewriteRule 看起来像:

重写引擎开启

RewriteCond %{QUERY_STRING} ^wh=(.*)$ [NC]

重写规则 ^/myfakeoam/obrareq.cgi$ http://apache1.whatever.com/formbasicprotected/index.html [CO=wh:%1:.whatever.com:1440:/]

当我手动测试时,通过在浏览器中手动输入 URL,如果请求看起来像这样,那么 RewriteRule 似乎能够匹配请求:

http:///myfakeoam/obrareq.cgi?wh=xxx&ru=yyyy&....

但是,在我的实际系统中,请求是由另一个应用程序创建的,它似乎是 URL 编码(实际上是 URL 编码两次)查询字符串(例如,替换为“%3D”等。 ),即:

http:///myfakeoam/obrareq.cgi?wh%3Dxxx....

如果查询字符串部分是 URL 编码的,我的 RewriteRule 中的模式匹配没有失败......

有没有办法处理这种情况?

谢谢, 吉姆

【问题讨论】:

  • 我猜另一个应用程序对查询字符串进行双 URL 编码的原因是因为这样的事情 (blog.perplexedlabs.com/2008/03/20/…)?但是,我可以制作一个适用于该传入请求的 RewriteRule 吗?吉姆

标签: mod-rewrite


【解决方案1】:

回答我自己的问题,我刚刚意识到 RewriteCond 只是对查询字符串进行正则表达式匹配,所以我将其更改为:

RewriteCond %{QUERY_STRING} ^wh%3D(.*)$ [NC]

然后它起作用了。

吉姆

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 2023-03-10
    • 2014-06-20
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多