【问题标题】:Regular expression with RedirectMatch does anything带有 RedirectMatch 的正则表达式可以做任何事情
【发布时间】:2010-12-14 14:58:37
【问题描述】:

我使用 .htaccess 来执行重定向。 这行

RedirectMatch permanent .*\?langue=([\w]{2}).*id_([\w]+)=([1-9]+) ***[protocol]***://myserver/rootContext/action?pagename=dir1/dir2/dir3/Redirect&type=$2&id=$3&lang=$1

这里是我的初始网址:

***[protocol]***://localhost/adir/anotherDir/anotherDirAgian/oneMore/apage.php?langue=fr&id_dossier=261

这个正则表达式是正确的,但至少没有进行重定向。 使用简单的正则表达式和简单的 url 它可以正常工作。

有人可以帮忙吗? 谢谢 大卫·霍罗

【问题讨论】:

    标签: regex apache .htaccess redirect httpd.conf


    【解决方案1】:

    RedirectMatch 对不包含任何查询参数的“URL-path”进行操作。

    您可以通过在 mod_rewrite 中使用 RewriteCond 来匹配查询字符串。尽管 IMO 试图用正则表达式解析查询字符串是一个狡猾的命题。任何意外的参数或排序都可能破坏您的正则表达式。由于您没有匹配特定路径,因此如果新系统中的任何 URL 在查询中包含 ?langue=...,也可能会出错。

    【讨论】:

      【解决方案2】:

      除了 bobince 已经说过的,试试这个 mod_rewrite 规则:

      RewriteEngine on
      RewriteCond %{QUERY_STRING} ^(([^&]*&)*)langue=(\w{2}.*)
      RewriteCond %1lang=%3 ^(([^&]*&)*)id_([\w]+)=([1-9]+.*)
      RewriteRule .* $0?%1type=%3&id=%4
      

      替换 URL 必须根据您的需要进行调整,但查询替换应该是正确的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        • 2020-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多