用于合并新旧站点并共享子域名的虚拟主机?

用于合并新旧站点并共享子域名的虚拟主机?

我们最近创建了一个新的“主网站”,它整合了两个旧网站,并且需要为每个旧网站做一些最终的 DNS 和 Apache 配置工作。(需要澄清的是,这是一家小公司,没有资源聘请专家,而且我正试图在非我专业的领域提供帮助,并确定需要如何进行这些更改。

我们希望将旧站点指向新站点上将“翻译”请求的文件夹,以及指向“翻译”文件夹内的新子文件夹的几个旧子域名。

我查看了相关问题,但它们都包含超出我能力范围的考虑因素,并且涉及共享主机。我们的站点都位于 EC2 上,因此我们对更改的内容拥有完全控制/责任。

令人困惑的是,多个域名使用同一个 IP,而所有域名都有相同的子域名。我不知道如何确保主域名正常工作,以及在一切完成后每个子域名仍然完好无损。

http://www.newsite.com   ==>  c:\www\index.php
http://subX.newsite.com  ==>  c:\www\subdomainX\index.php
http://www.oldsite.com   ==>  c:\www\oldsite\index.php
http://subX.oldsite.com  ==>  c:\www\oldsite\subdomainX\index.php

http://www.newsite.com   ==>  www.newsite.com/
http://subX.newsite.com  ==>  www.newsite.com/subdomainX/
http://www.oldsite.com   ==>  www.newsite.com/oldsite/
http://subX.oldsite.com  ==>  www.newsite.com/oldsite/subdomainX/

旧站点 http.conf(正在关闭)

<VirtualHost *:80>
  ServerName oldsite.com
  DocumentRoot "c:/apache/htdocs/hosted/oldsite"
  ServerAlias *.oldsite.com 10.20.30.40
  RewriteEngine On
  RewriteOptions Inherit
</VirtualHost>

<VirtualHost *:80>
  ServerName subX.oldsite.com
  DocumentRoot "c:/apache/htdocs/hosted/oldsite/subX"
  RewriteEngine On
  RewriteOptions Inherit
</VirtualHost>

新的 http.conf(目前正在生产中)

<VirtualHost *:80>
  ServerName subX.newsite.com
  DocumentRoot "C:/www/subX"
  RewriteEngine Off
</VirtualHost>

我想要实现的目标:但寻求关于正确性的指导/澄清:

为了http://www.oldsite.com==> c:\www\oldsite\index.php

<VirtualHost *:80>
    ???????????
    ServerName oldsite.com
    DocumentRoot "c:/www/oldsite"
</VirtualHost>

为了http://subX.oldsite.com==> c:\www\oldsite\subdomainX\index.php

<VirtualHost *:80>
    ???????????
    ServerName subX.oldsite.com
    DocumentRoot "c:/www/oldsite/subX"
</VirtualHost>

思考除了新的 IP 地址之外,DNS 变化没有什么不同,但我不知道如何处理 Apache 设置以适应共享子域。

更新

我们正在淘汰旧域名,因此当有人访问 www.oldsite.com 或 sub1.oldsite.com 时,我们希望永久重定向到 www.newsite.com 中的相应文件夹。从那里,文件夹中包含的 index.php 将完成工作。像 www.oldsite.com/somewhere 这样的网址将由 www.newsite.com/oldsite/index.php 处理。

有人能指导我吗?我正在尝试弄清楚要设置什么来进行测试,一旦我单击“保存”,如果设置不正确,一切都会变得一团糟。我的 DNS/Apache 技能充其量也只是不太熟练,而且这是一个生产环境,所以我不能冒着典型的学习曲线停机的风险,哈哈。

答案1

我强烈地强烈建议设置测试服务器(还有备份。一定要备份)。除了虚拟主机配置本身之外,将应用程序移至新主机需要测试整个堆栈(是否执行了正确的 PHP、PHP 是否连接到正确的数据库等)。要么在本地 Windows PC 上安装相同的服务器堆栈,要么最好花几美元启动具有不同公共 IP 地址的 Amazon 映像的新实例(我不在 Amazon 上使用 Windows,所以我不确定您如何做到这一点,但这个问题看起来可能是获取当前实例副本的起点)。

无论哪种方式,为了达到此目的,要访问测试系统,您不需要立即更改 DNS,而是编辑你的 hosts 文件覆盖本地计算机上的 DNS,将所有主机名解析为测试服务器的 IP。这样您就可以使用实际主机名(而不是“test.newsite.com”)进行测试,因为 Apache 会根据和指令检查浏览器中输入的主机名以及请求标头中发送的主机名,以Host:决定使用哪个块。您需要添加一行包含所有主机名的内容:ServerNameServerAliasVirtualHost

1.2.3.4 oldsite.com www.oldsite.com sub.oldsite.com www.newsite.com newsite.com etc

至于配置,现有的新站点配置应按原​​样工作。您需要将其设为第一个 VirtualHost 块,以便 Apache 将其用作默认值。对于所有旧站点,要将对给定主机名的所有请求重定向到单个 URL,您可以使用包含以下内容的 VirtualHost 块RedirectPermanent /(它将重定向以 开头的每个请求/,它们都这样做):

<VirtualHost *:80>
  ServerName old_hostname
  RedirectPermanent / http://new_hostname/oldsite/index.php
</VirtualHost>

ServerName并且应该与您之前所拥有的相匹配,但是如果某些不遵守 HTTP 1.1 的真正糟糕的客户端陷入重定向循环并一遍又一遍地请求 IP,ServerAlias我会从中删除 IP 地址。ServerAlias

您需要确保已mod_alias在服务器上启用该Redirect命令。

获得已知良好的 Apache 配置后,使用它来配置 newsite.com 服务器(保留先前配置的备份万一)。现在您可以关闭测试服务器,然后再次编辑主机文件并删除您创建的行,以便您可以仔细检查新服务器是否正确为 newsite.com 提供服务,包括当您直接输入 URL 时,所有 newsite.com/oldsite/index.php 页面是否正常工作。然后,您可以再次编辑主机文件并输入新服务器 IP 和所有 oldsite 主机名,然后测试新服务器是否正确重定向 oldsite.com 网站。

最后,您将编辑 oldsite.com 的 DNS 配置,将旧 IP 地址替换为新 IP 地址。(现在是时候意识到您需要知道如何处理[电子邮件保护]如果它没有托管在其他地方)请注意 TTL 设置,因为旧服务器将继续接收请求,直到每个人的缓存过期,所以您至少在那么长时间内无法将其关闭。

相关内容