【问题标题】:apache mod_rewrite change base-url in deeplinksapache mod_rewrite 更改深度链接中的基本 URL
【发布时间】:2021-10-29 20:12:03
【问题描述】:

我的系统的整个 URL 正在发生变化,因为它被移动到了不同的位置。我想使用我的旧 Apache 将 301 所有调用转发到新系统一段时间。

我有这样的深层链接:

https://old.example/groups/something

这将在新系统上保持不变 - 但具有不同的基本 URL,例如:

https://new.example/groups/something

我正在寻找一个 Apache 重写规则,该规则支持 old.example/ 之后的所有内容,同时更改基本 URL 部分并将用户发送到他在新系统中要求的深层链接位置。

我试过了:

RewriteCond %{HTTP_HOST} old\.example$
RewriteCond %{REQUEST_URI} ^\/$
RewriteRule .* https://new.example/ [R=301,L]

但这仅适用于直接调用基本 URL 的情况,而不适用于深度链接。

【问题讨论】:

  • 你在用.htaccess吗?

标签: regex apache mod-rewrite forward


【解决方案1】:
RewriteCond %{HTTP_HOST} old\.example$
RewriteCond %{REQUEST_URI} ^\/$
RewriteRule .* https://new.example/ [R=301,L]

您的第二个条件RewriteCond 指令)专门检查REQUEST_URI 是否仅是文档根(“基本 URL”)。您也没有将请求的 URL 路径传递给目标 URL。

但是,如果新站点已移动到“不同位置”并且新域和旧域指向不同的服务器,那么您可以在“旧 Apache”服务器上使用简单的 Redirect 指令来重定向所有内容并维护相同的 URL 结构。例如:

Redirect 301 / https://my.new.system.url.net/

Redirect 指令是前缀匹配的,匹配后的所有内容都被复制到目标 URL 的末尾。因此,/groups/something 的请求被重定向到 https://my.new.system.url.net/groups/something

使用 302(临时)重定向进行测试以避免潜在的缓存问题。

参考:


除此之外:简单说明一下您用来描述 URL 的“独特”术语,因为它有点令人困惑...

你所说的“base-url”实际上是主机名(或域名)。

您所谓的“深层链接”实际上是 URL 路径(或 URL 的其余部分)。 URL 路径以 主机名 之后的第一个斜杠开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2014-07-04
    • 2018-10-07
    • 2016-10-10
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多