我面临的一个常见问题是在网站上放置一个保留页面,同时执行新部署或完成一些其他维护(如测试新部署)。我知道如果您使用的是 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
文件。
所以我的问题是,有没有更好的方法来做到这一点?