Redirect 301 /air-india-trial/air-india-promo-conditions/ /features/
前往
/trial/air-india-promo-conditions/
大概您的意思是 请求 /air-india-trial/air-india-promo-conditions/ 最终被重定向到 /trial/air-india-promo-conditions/(那个 directive 不会“去”任何东西)。
...因为调用了第二个重定向。我已经尝试将https://example.com/ 放在重定向 301 中的第二个 url 之前,但这不起作用。
您不能在第一个参数中将https://example.com/ 作为 URL 的一部分 - 如果您指的是这个?它根本不匹配。它仅与 URL 路径匹配。
由于Redirect 指令是前缀匹配(匹配后的所有内容都被复制到目标 URL 的末尾),因此您需要按具体顺序排列您的 Redirect 指令.最具体(即最长路径)的重定向需要在不太具体的重定向之前。
mod_alias Redirect 指令并不像您暗示的那样“链接”在一起。
因此,在您的示例中,以下内容应该可以将 /air-india-trial/air-india-promo-conditions/ 重定向到 /features/:
Redirect 301 /air-india-trial/air-india-promo-conditions/ /features/
Redirect 301 /air-india-trial/ /trial/
(尽管您可能确实建议指令已经按顺序排列(或者您只是指问题中的顺序)?在这种情况下,与另一个指令仍然存在冲突,或者您看到的是缓存响应。)
进行此更改后,您需要清除浏览器缓存,因为 301(永久)重定向将被浏览器缓存。
如果您只想重定向/air-india-trial/ 而不是/air-india-trial/<something>,那么您需要使用RedirectMatch 指令,它与正则表达式匹配,而不是前缀匹配。例如:
RedirectMatch 301 ^/air-india-trial/$ /trial/
此外,如果您有任何 mod_rewrite (RewriteRule) 重定向,那么这些可能会发生冲突。由于不同的 Apache 模块在整个请求的不同时间独立运行,因此您应该避免混合来自两个模块的重定向,因为可能存在冲突。 (mod_rewrite 将始终首先在 Apache 2.4 上运行,尽管这些指令在 .htaccess 中的顺序明显。)