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

时间:2015-11-23 09:46:52

标签: regex apache .htaccess url-redirection mod-alias

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

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

我将此规则与正则表达式一起使用,但我收到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

为什么它不起作用的任何想法?

1 个答案:

答案 0 :(得分:3)

您的规则目前是:(细分为多行以便更好地展示/理解):

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. citycards/citycards-locations/munche‌​n/citycards-trachtenvogl-reichenbachst‌​r-47-munchen
    2. citycards/citycards-location‌​s/munchen/citycards-4-you-munchen-hirtenstrasse-18‌​-munchen18‌​-munchen后面有空格)
  • 匹配所有内容,直到URI结束

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

我看到了2个问题。

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