.htaccess 中的 301 重定向将旧文件路径/名称附加到新 url

Posted

技术标签:

【中文标题】.htaccess 中的 301 重定向将旧文件路径/名称附加到新 url【英文标题】:301 Redirect in .htaccess is appending old file path/name to new url 【发布时间】:2019-08-12 20:10:08 【问题描述】:

我有两个网址:old-site.com 和 new-site.com。 我在 old-site.com 上的根文件夹中没有文件,只有 .htaccess 文件。我不想再使用旧域名了。但是,我确实想将链接汁传递给新域。因此,我在 .htaccess 文件中创建了 301 Redirects 并将其放在 old-site.com 的根文件夹中。

为什么重定向 301 会将“old-site.com/...”附加到 new-site.com?

我的整个 .htaccess 看起来像这样(我跳过了一些链接以缩短它):

#Begin 301 Redirects
Redirect 301 / https://www.new-site.com/
Redirect 301 /contactus https://www.new-site/contact-us/
Redirect 301 /rentals https://www.new-site/lodging/
Redirect 301 /lift.html https://www.new-site/our-rentals/boat/
Redirect 301 /rentals.html https://www.new-site/our-rentals/
Redirect 301 /map.html https://www.new-site/contact-us/
Redirect 301 /giftshop https://www.new-site/store/gift-shop/
#End 301 Redirects

我没有任何重写。以上是我的全部代码。

以下重定向工作正常:

Redirect 301 / https://www.new-site.com/

但是,任何其他重定向都会在 new-site.com 上创建以下绝对路径,并出现 404 错误:

如果我重定向:

Redirect 301 /contactus https://www.new-site/contact-us/

转到:


https://www.new-site.com/old-site.com/contactus

如果我重定向:

Redirect 301 /lift.html https://www.new-site/lift/

转到:


https://www.new-site.com/old-site.com/lift.html

为什么重定向 301 会将“old-site.com/...”附加到 new-site.com?

谢谢,

德里克

【问题讨论】:

【参考方案1】:

你的规则不会做你需要正确的事情,因为Redirect 301 / https://www.new-site.com/这行将首先匹配任何请求,如果你把它放在最后它也将匹配任何请求,所以,如果你希望它只匹配root使用RedirectMatch 能够像这样使用正则表达式:

RedirectMatch 301 /?$ https://www.new-site.com/

这样,其余规则将按预期工作。

注意:清除浏览器缓存测试

【讨论】:

以上是关于.htaccess 中的 301 重定向将旧文件路径/名称附加到新 url的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 将旧域重定向到新域

我如何 .htaccess 301 将所有页面/文件(除了一个)重定向到新域?

HTACCESS-将旧页重定向到新页

htaccess 重定向 301 + 重写冲突

HTACCESS-将旧域重定向到新域

htaccess 301 重定向 - 删除查询字符串 (QSA)