我在.htaccess中创建了一堆301重定向,例如
Redirect 301 / /de/
Redirect 301 /site_1/ https://www.new.com/de/company/site_1/
Redirect 301 /services/site_2/ https://www.new.com/de/services/site_1/
等等。
当我进入
www.old.com/site_1/
(错误)
我被定向到
https://www.new.com/de/site_1/
(缺少服务文件夹)
似乎重定向的网址中缺少父文件夹。对于驻留在文件夹中的所有其他站点也是如此。
答案 0 :(得分:1)
Redirect 301 / /de/ Redirect 301 /site_1/ https://www.new.com/de/company/site_1/ Redirect 301 /services/site_2/ https://www.new.com/de/services/site_1/
由于mod_alias Redirect
指令是前缀匹配,因此www.old.com/site_1/
的请求实际上会被您的第一个(最常规)规则捕获。并且匹配后的所有内容(即。site_1/
)都会附加到目标网址的末尾(即/de/
),因此生成的重定向变为/de/site_1/
(但不会{{1}如你所说的那样?)。
您可以通过撤消指令来解决此问题,以便首先获得最具体的匹配。例如:
new.com
或者,正如您在评论中提到的那样,请改用Redirect 301 /services/site_2/ https://www.new.com/de/services/site_1/
Redirect 301 /site_1/ https://www.new.com/de/company/site_1/
Redirect 301 / /de/
- 这不是前缀匹配,而是与特定的正则表达式匹配。虽然您仍需要修改模式。类似的东西:
RedirectMatch
虽然这现在与确切的网址匹配,但可能是您需要的网址。