首页 > 解决方案 > 为什么我的 htaccess 重定向会改写我的 URL?

问题描述

我正在尝试通过 htaccess 实现 301 重定向,但它们的行为不符合预期。例如,如果我按照它们在 htaccess 中出现的顺序对重定向进行抽样:

<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /hello/ https://www.example.com/goodbye/
Redirect 301 /hello/orange/ https://www.example.com/fruit/orange/
Redirect 301 /hello/apple/ https://www.example.com/fruit/apple/
Redirect 301 /hello/pear/ https://www.example.com/fruit/pear/

</IfModule>

不是每个页面都重定向到正确的目的地,而是重写任何包含第一行作为其 URL 一部分的 URL。因此,任何带有 /hello/ 的 URL 都会将该部分重写为 /goodbye/ - 上面的实际结果最终是:

/hello/ - > https://www.example.com/goodbye/
/hello/orange/ - > https://www.example.com/goodbye/orange/
/hello/apple/ - > https://www.example.com/goodbye/apple/
/hello/pear/ - > https://www.example.com/goodbye/pear/

我已经通过重新排序重定向确认了这种效果。如果我们将第一个重定向放在底部,那么所有重定向都可以正常工作。

我在这里想念什么?

标签: .htaccessredirect

解决方案


请查看文档,它解释了 Redirect 指令仅将 URL 路径视为前缀 -以您提供的参数开头的任何内容都将被重写。

https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect

然后任何以 URL-path 开头的请求都会在目标 URL 的位置向客户端返回一个重定向请求。匹配的 URL 路径之外的其他路径信息将附加到目标 URL。


推荐阅读