Apache,重定向到已移动的目录

Apache,重定向到已移动的目录

在我们的网络服务器上,目录已从一个位置“复制”到另一个位置。现在原始位置已消失,但我收到了提供到新位置的重定向请求。

我认为 mod_rewrite 是实现此目的的最佳方法,尽管我并不反对使用其他方法(如果可用)。URL 方案如下。

Old URL: www.exampleurl.com/subdir1/olddirectory/subdir2
New URL: www.exampleurl.com/subdir1/newdirectory/subdir2

Subdir1 永远不会改变,因此它和 .com 部分可能被忽略。但是 subdir2 目录通常直接访问,并且有许多不同的选项。

我们已经使用 mod_rewrite 通过 SSL/TLS 重定向所有流量,因此继续这样做可能是最好的效果。

根据目前的评论和回答,我觉得这里缺少一些信息。因此,以下是所讨论的站点和目录的配置方式,非常基础。希望这将有助于进一步解答。

该站点分布在两个 VirtualHost 配置的两个文件中,一个用于 HTTP,一个用于 HTTPS。HTTP VirtualHost 包含一个 mod_rewrite 条件和规则,用于将进入其中的所有流量重定向到 HTTPS 端口。相关目录在 conf-enabled 中的单独文件中配置。两者都包含 Alias 声明和 Directory 区域。Alias 是必需的,因为实际文件在 NFS 挂载的 /mnt 目录中。

答案1

使用 mod_rewrite 你可以做这样的事情:

RewriteRule ^/?(subdir1)/olddirectory(?:$|/)(.*) https://www.example.com/$1/newdirectory/$2 [R=301,L]

以上内容将重定向如下:

  • /subdir1/olddirectory/subdir1/newdirectory/
  • /subdir1/olddirectory//subdir1/newdirectory/
  • /subdir1/olddirectory/<something>/subdir1/newdirectory/<something>

并重定向到 HTTPS + 规范主机名,因此可以放置您现有的规范重定向,以尽量减少重定向的次数。

首先使用 302(临时)重定向进行测试,以避免缓存问题。

相关内容