具有共享子域的旧/新网站的虚拟主机?

我们最近创build了一个新的“主要网站”,整合了两个较旧的网站,并且需要为每个旧的网站做一些最终的DNS和Apacheconfiguration工作。 ( 为了澄清一些,这是一个没有资源聘请专家的小公司,我正在帮助一个不是我的专业的领域,并决定如何做出这些改变。

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

我已经看过相关的问题,但是他们都包含了我的联盟方面的考虑,并且在共享的主机上。 我们的网站都位于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/ 

Oldsite http.conf (正在closures)

 <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> 

认为 DNS更改没有什么不同,除了新的IP地址,但我不知道如何处理Apache的设置,以适应共享子域。

更新

我们正在淘汰旧域名,因此当有人访问www.oldsite.com或sub1.oldsite.com时,我们需要永久redirect到www.newsite.com上的相应文件夹。 从那里,该文件夹中包含的index.php将完成工作。 www.oldsite.com/somewhere等url将由www.newsite.com/oldsite/index.php处理。

有人可以通过这个指导我吗? 我试图弄清楚要设置什么来testing,只要我点击“保存”,如果不正确的话,所有的地狱都会崩溃。 我的DNS / Apache技能最好不过了,这是一个生产环境,所以我不能承担我典型学习曲线的停机时间,哈哈。

我强烈build议设置一个testing服务器(也是备份,绝对备份)。 除了虚拟主机configuration本身,将应用程序移动到新家需要testing整个堆栈(正确的PHP是否被执行,PHP是否连接到正确的数据库等)。 要么在本地的Windows PC上安装一个相同的服务器堆栈,要么支付几块钱,用不同的公有IP地址启动一个亚马逊图像的新实例(我不在亚马逊上使用Windows,所以我不知道你是怎么做的这但是这个问题看起来可能是获取当前实例副本的起点 )。

无论哪种方式,为了达到此目的访问testing系统,而不是现在更改DNS,您将编辑主机文件以覆盖一台本地计算机上的DNS,以将所有主机名parsing为testing服务器的IP。 这样可以使用实际的主机名(而不是“test.newsite.com”)进行testing,因为Apache检查在浏览器中input的主机名,并在Host: request头中发送ServerNameServerAlias指令来决定使用哪个VirtualHost块使用。 您可以添加一个包含所有主机名的行:

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

至于configuration,现有的newsiteconfiguration应该按原样工作。 您将希望使这个第一个VirtualHost块,所以Apache使用它作为默认。 对于所有旧站点,要将所有请求redirect到一个给定的主机名到一个URL,你可以使用包含RedirectPermanent /一个VirtualHost块(它redirect每个以/开头的请求,他们都这么做):

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

ServerNameServerAlias应该匹配你以前的,但是我会从ServerAlias中删除IP地址,如果一些不符合HTTP 1.1的非常糟糕的客户端卡在一个请求IP的redirect循环中。

您需要确保您的服务器上启用了mod_alias才能使用Redirect命令。

一旦你有一个已知的Apacheconfiguration,使用它来configurationnewsite.com服务器(保留以前的configuration备份以防万一 )。 您现在可以closurestesting服务器,再次编辑您的主机文件,并删除您创build的行,以便您可以仔细检查新服务器是否正确投放newsite.com,包括所有newsite.com/oldsite/index当您直接inputurl时.php网页正常工作。 然后,您可以再次编辑您的主机文件,并input具有所有旧站点主机名称的新服务器IP,然后testing新服务器是否正确redirectoldsite.com站点。

最后,您将编辑oldsite.com的DNSconfiguration,以用新的IP地址replace旧的IP地址。 (现在是时候认识到,如果邮件没有托pipe在别的地方,你需要知道如何处理[email protected])注意TTL设置,因为旧的服务器会一直收到请求,直到每个人的caching过期为止至less这么长时间你将无法closures它。