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



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

  • citycards/citycards-locations/munche‌​n/citycards-trachtenvogl-reichenbachst‌​r-47-munchen
  • citycards/citycards-location‌​s/munchen/citycards-4-you-munchen-hirtenstrasse-18‌​-munchen

我将此规则与regex一起使用,但我得到一个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/$1

有什么想法为什么它不起作用吗?

您当前的规则是:(分解为多行以更好地显示/理解):

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/$1

基本上,你的正则表达式是这样说的:

  • 匹配/citycards/citycards-locations/muenchen/
  • 其后面没有以下中的任何一个

    1. CCD_ 5
    2. citycards/citycards-location‌​s/munchen/citycards-4-you-munchen-hirtenstrasse-18‌​-munchen(在18‌​-munchen之后有一个空格)
  • 匹配所有内容直到URI结束

并将匹配的URI重定向到与匹配的URL基本相同的CCD_ 8。

我看到两个问题。

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

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

RewriteRule模式的末尾附近有一个未绘制的空间。这肯定会导致500错误,因为空格是分隔符,参数将不匹配(无效标志)。

看起来这是一个拼写错误,应该简单地删除吗?

最新更新