2

我面临的一个常见问题是在网站上放置一个保留页面,同时执行新部署或完成一些其他维护(如测试新部署)。我知道如果您使用的是 Apache (htaccess),这可以很容易地完成,但这并不总是在使用 Web 服务器(IIS、Nginx 等)。我当前的所有网站都将每个请求重定向到公共目录根目录中的 index.php 文件(例如 Zend Framework、Wordpress、Symfony2),因此我当前的解决方案如下:

将以下代码添加到根index.php文件中:

$maintenanceFile = 'maintenance.flag';

if (file_exists($maintenanceFile)) {
    $ips = explode("\n",file_get_contents($maintenanceFile));
    foreach($ips as $key=>$value) {
        $ips[$key] = trim($value);
    }
    if(!isset($_COOKIE['BYPASS_MAINTENANCE']) && !in_array($_SERVER['REMOTE_ADDR'], $ips)) {
        include_once dirname(__FILE__) . '/holding.html';
        exit;
    }

}

有了这个,我也可以简单地maintenance.flag在根目录中添加一个文件,其中包含允许的 IP 地址列表,如下所示:

127.0.0.1
123.456.789.101

然后,如果您的 ip 地址存在于列表中,您可以在再次公开之前查看当前网站并对其进行测试等,否则您将看到一个holding.html页面(也位于根目录中)。完成后,我可以简单地删除maintenance.flag文件。

所以我的问题是,有没有更好的方法来做到这一点?

4

2 回答 2

2

我将我的网站分成 3 个部分(副本)并拥有 3 个子域。

1) dev.website.com 是为开发者准备的。如果找到您的 ip,您可以访问,就像您的方式一样。

2) test.website.com 是在我启动我们需要测试错误的网站之前供测试人员使用的。

3) live.website.com 等于 website.com 对于所有其他人。

这样我就可以轻松开发,而不会在实时域上造成问题。

您可以轻松地从 dev 切换到 test 再到 live。您可以轻松复制环境。

希望对您有所帮助!

于 2012-12-13T11:46:13.557 回答
1

网站的开发和生产版本应该始终位于不同的目录中,并使用不同的域名或端口或路径进行访问。两者都不应使用相同的数据库或其他资源,如上传的文件等。

如果您使用的是 Subversion,或 git 或任何代码存储库(我希望您是),那么很容易有一个单独的“开发”环境设置,您可以在其中进行所有测试等。我所有的网站都是这样设置的。一旦我实现或修复了功能并在我的“开发”端测试了它们,我将我的更改提交到 SVN,然后在我的“产品”端,我只需svn update将所有内容推入生产。

您的技术的问题$maintenanceFile是对您网站的每个页面请求都会导致对您的硬盘进行 file_exists 检查。这对于较小的站点可能无关紧要,但对于具有大量点击的较大站点,这可能会导致整体性能下降。

于 2012-12-13T11:44:40.007 回答