重定向匹配排除 URL 不起作用

Redirect Match with excluding URLs doesnt work

我使用 RedirectMatch 规则应该排除以下两个 URL:

我将此规则与正则表达式一起使用,但出现 500 内部服务器错误:

RedirectMatch 301 /citycards/citycards-locations/muenchen/((?!citycards/citycards-locations/munche‌​n/citycards-trachtenvogl-reichenbachst‌​r-47-munchen|citycards/citycards-location‌​s/munchen/citycards-4-you-munchen-hirtenstrasse-18‌​-munchen ).+)$ /citycards/citycards-locations/muenchen/

知道为什么它不起作用吗?

/citycards-4-you-munchen-hirtenstrasse-18‌​-munchen ).+)$

您的 RewriteRule 模式末尾附近有一个未转义的 space。这肯定会导致 500 错误,因为 space 是定界符并且参数不匹配(无效标志)。

看起来这是一个拼写错误,应该直接删除?

您目前的规则是:(为了更好地分解成多行 display/understanding):

RedirectMatch
301
/citycards/citycards-locations/muenchen/((?!citycards/citycards-locations/munche‌​n/citycards-trachtenvogl-reichenbachst‌​r-47-munchen|citycards/citycards-location‌​s/munchen/citycards-4-you-munchen-hirtenstrasse-18‌​-munchen ).+)$
/citycards/citycards-locations/muenchen/

基本上,您的正则表达式表示:

  • 匹配/citycards/citycards-locations/muenchen/
  • 其后不跟以下任何一项

    1. citycards/citycards-locations/munche‌​n/citycards-trachtenvogl-reichenbachst‌​r-47-munchen,
    2. citycards/citycards-location‌​s/munchen/citycards-4-you-munchen-hirtenstrasse-18‌​-munchen(在18‌​-munchen之后有一个space)
  • 匹配所有内容直到 URI 结束

并将匹配的 URI 重定向到:/citycards/citycards-locations/muenchen/,这与匹配的 URL 基本相同。

我看到 2 个问题。

  1. 如果您的否定前瞻中的空白 space 不被视为模式的一部分,您实际上是将 4 个参数传递给 RedirectMatch 指令,导致状态 500 错误
  2. 如果模式被正确解析,你就会有一个无限的重定向循环。