Answers:
您在Linux / BSD机器上吗?如果是这样,您可以轻松地使用符号链接来实现此目标。
在此处创建网站的版本1:
/var/www/www.example.org.v1
创建指向该目录的符号链接
cd /var/www
ln -s www.example.com.v1 www.example.com
这应该给您一个目录列表(ls -la
),看起来像这样:
lrwxr-xr-x 1 userid users 18 Aug 3 03:35 www.example.com -> www.example.com.v1
drwxr-xr-x 2 userid users 512 Aug 3 03:35 www.example.com.v1
将您的Web服务器设置/var/www/www.example.com
为用作其文档根目录。您将永远不必更改此设置;所有重新指向都将在文件系统级别完成。
现在,当您要交换站点的版本2时,只需将新版本放在以下位置:
/var/www/www.example.org.v2
并更新符号链接以指向此版本:
ln -sfh www.example.com.v2 www.example.com
这将使您的目录输出看起来像这样:
lrwxr-xr-x 1 userid users 18 Aug 3 03:43 www.example.com -> www.example.com.v2
drwxr-xr-x 2 userid users 512 Aug 3 03:42 www.example.com.v1
drwxr-xr-x 2 userid users 512 Aug 3 03:41 www.example.com.v2
如您所见,www.example.com符号链接现在指向您网站的版本2。这是一项原子操作,不应导致与文件不可用相关的任何停机时间。
当然,在确保更新数据库结构,提供任何静态资源(并链接到正确的版本)等方面,仍然存在相当大的复杂性,但是至少这要确保为数据库提供所有正确的资源。新站点立即可用。
Windows Vista和Server 2008还使用该mklink
命令支持符号链接,尽管我没有任何直接的经验。
您可以在apache中使用虚拟主机,以在2个不同的URL上具有2个版本的代码。一个常用的例子是:
test.example.com-> /var/www/version1.2
www.example.com-> /var/www/version1.1
两者都在同一台服务器上,但全世界可能只有一台可以访问。一旦确定test.example.com可以正常工作,就可以更改它们在apache配置中指向的位置,然后...。新站点,新代码。假设没有数据库架构更改,这应该起作用。因此,进行更改后,它将是:
test.example.com-> / var / www / newtestversion
www.example.com-> /var/www/version1.2
这是虚拟主机的示例apache config指令:
<VirtualHost *:80>
ServerAdmin gabe@localhost
DocumentRoot "/var/www/version1.1"
ServerName test.example.com
</VirtualHost>
有关如何执行此操作的更多信息,请参阅apache虚拟主机文档。
我不确定如何在IIS中执行此操作,但我想也有办法。
如果出现问题,请将虚拟主机切换回原始主机,然后您的旧站点又恢复正常了……没有问题。您必须重新启动apache才能使这些更改生效,但这通常是非常快的事情。
在IIS中,可以使用更新设置第二个虚拟目录。
然后,您重定向所有请求,或将第二个站点的绑定重新映射到所需的主机名
IIS 7中的Http重定向:http : //technet.microsoft.com/zh-cn/library/cc732930(WS.10).aspx
我的建议是: