代码之家  ›  专栏  ›  技术社区  ›  Abs

RedirectMatch-阻止它匹配第一个匹配项

  •  0
  • Abs  · 技术社区  · 7 年前

    我的重定向与第一个匹配,而不是最接近的匹配。

    请求URL: /audios/3933

    RedirectMatch 301 ^/audios/393/ /artists/a/1849
    RedirectMatch 301 ^/audios/3933/ /artists/b/1850
    

    ^ . 但是,如何使其与URL中的完整ID匹配。

    /audios/393/a 或 /audios/3933/a

    1 回复  |  直到 7 年前
        1
  •  1
  •   Nic3500 tpdi    7 年前

    重定向(和重写)规则应该首先用限制性最强的匹配指定,然后是更为允许的匹配(在配置文件中自上而下)。

    在您的特殊情况下,您提到数字后面有一些字符串。因此,您可以这样修改配置:

    RedirectMatch 301 "^/audios/393/.*$"  "/artists/a/1849"
    RedirectMatch 301 "^/audios/3933/.*$" "/artists/b/1850"
    

    如果需要数字后面的字符串,请使用以下配置:

    RedirectMatch 301 "^/audios/393/(.*)$"  "/artists/a/1849/$1"
    RedirectMatch 301 "^/audios/3933/(.*)$" "/artists/b/1850/$1"
    

    $1 将替换为由括号分隔的字符串。 .* 意思是“任何字符 . ),重复0到n次 * ).

    对于查询字符串, RedirectMatch Redirect 指令。在 重定向 https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect ),您可以阅读:

    这包括带有GET参数的请求,例如 http://example.com/service/foo.pl?q=23&a=42 http://foo2.example.com/service/foo.pl?q=23&a=42 . 请注意,帖子将

    实际上,查询字符串是自动添加的(GET)。

    RewriteRule [QSD] 因为目标URL不包含查询字符串。该标志不会将查询字符串添加到目标URL。

    然后,配置将如下所示:

    RewriteEngine On
    RewriteRule "^/audios/393/.*$"  "/artists/a/1849" [R=301,L,QSD]
    RewriteRule "^/audios/3933/.*$" "/artists/b/1850" [R=301,L,QSD]
    

    $1 同样适用于 如果你需要的话。