【问题标题】:Htaccess Regex - Redirect for urls with plus and percent charactersHtaccess Regex - 重定向带有加号和百分号的网址
【发布时间】:2012-11-09 07:18:32
【问题描述】:

当 URL 包含 + 或 % 字符时,我想将该 URL 重定向到我编写的 php 重定向脚本。正则表达式 (.+)(?:+|%)(.*)?可以工作并找到包含 + 或 % 的任何 URL,但在 htaccess 中使用时它将无法工作 -

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} (.+)(?:\+|%)(.+)?
RewriteRule ^(.*)$ /directory/content/my-redirect-rewrite.php [L]

我做错了什么?感谢您的观看。

【问题讨论】:

    标签: regex apache .htaccess http redirect


    【解决方案1】:

    由于您没有使用 RewriteCond 捕获组,因此不需要 ?: 并且也不需要 (.+) 组。试试这个,如果您不希望它实际更改浏览器中显示的 url,请删除 R=302

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} (\+|\%)
    RewriteRule ^(.*)$ /directory/content/my-redirect-rewrite.php [R=302,NC,L]
    

    【讨论】:

    • 感谢您抽出宝贵时间。在这种情况下 (\+|\%) 我能够重定向其中包含 %25 (%) 的 URL,但具有 %5B 或 %5D 的 URL 仍然无法重定向到脚本。抱歉,如果我让您感到困惑,但我需要重定向所有包含 % 字符的 URL。例如 - mydomain/vertical%5B1%5D.jpg-210x570.jpg
    • 不,我明白你的意思,但现在我正在我的机器上尝试它,我看到 url 解码发生在重写规则适用之前,你的也这样做吗?
    • 是的,我用这样的方法解决了这个问题 - ["-*]|\s|\+|,|[:->]|[[-\^]|[{-~ ] 这是正确的方法还是有更好的方法来查找 URL 是否包含 % 字符?
    • 据我所知,没有办法得到原始的未解码的 url 字符串,所以你只需要用类似 RewriteCond %{REQUEST_URI} 的东西过滤掉不可接受的字符!([A -z0-9#&\.\?\-]+)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多