HTACCESS - 多个RedirectMatch规则

时间:2015-03-27 11:17:24

标签: apache .htaccess redirect url-redirection

我在修复一些死链接的网站上工作;但是我的RedirectMatch指令存在问题。

RedirectMatch 301 "/treatmentsgenuine-dermaroller(.*)" http://example.com/treatments/genuine-dermaroller-therapy
RedirectMatch 301 "/treatments/genuine-dermaroller(.*)" http://example.com/treatments/genuine-dermaroller-therapy

这些都是为了纠正页面写得不好的链接(顶部),并将请求重定向到此页面的原始URL(底部)。 URL在URL中有一个商标符号,因此我删除它是为了便于输入/使用。

唯一的问题是,当这两个规则都到位时,网站会返回错误500。如果我删除第二个,它工作正常。我和其他RedirectMatch尝试添加htaccess时也遇到了同样的问题。

我试图在预感中添加[L]标志,但这似乎没有产生积极的影响。

这是否有任何问题我无法看到?

是否允许多个RedirectMatch指令?

2 个答案:

答案 0 :(得分:1)

只用这一个替换两个规则:

RedirectMatch 301 ^/(treatments)/(genuine-dermaroller)((?!-therapy).*)$ /$1/$2-therapy

您的第二条规则也匹配目标网址并导致重定向循环。

答案 1 :(得分:0)

我设法找到的最佳解决方案是

RedirectMatch 301 "((treatmentsgenuine-dermaroller(.)-therapy)|(treatments/genuine-dermaroller(.)-therapy))" http://example.com/treatments/genuine-dermaroller-therapy

这样,URL的两个变体都由同一规则处理,阻止了@anubhava指向我的重定向循环。