蛋糕PHP "down for maintenance"页



我找到了这篇关于如何创建"停机维护"页面的文章,但我在让它正常工作时遇到了一些麻烦。

define('MAINTENANCE', 1); 
if(MAINTENANCE > 0){
    require('maintenance.php'); die(); 
}

当我把这段代码放在/webroot.index 中时.php它可以工作。但是,答案建议添加IP地址检查,以便在它关闭时,我仍然可以查看它并确保任何更新顺利进行。

所以,它看起来像这样

define('MAINTENANCE', 0); 
if(MAINTENANCE > 0 && $_SERVER['REMOTE_ADDR'] !='188.YOUR.IP.HERE'){
    require('maintenance.php'); die(); 
}

问题是,蛋糕不会检测到我的IP地址。我输入了echo $_SERVER['REMOTE_ADDR'],它只显示::1。我也尝试使用我的user_id,但我Class 'AuthComponent' not found in...收到以下错误。

我尝试将其放入/index.php 和/App/index.php但维护页面未触发,页面正常加载。

我通常做的是使用 mod_rewrite ,这样它就独立于我的应用程序代码。

下面是一个示例,它将所有不是源自127.0.0.1的访问尝试重定向到与.htaccess文件位于同一文件夹中的maintenance.php

RewriteCond %{REMOTE_ADDR} !=127.0.0.1
RewriteRule . maintenance.php [L]

然后,maintenance.php可能如下所示:

<?php
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Retry-After: 86400');
?><!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Temporarily Unavailable</title>
</head><body>
<h1>Service Temporarily Unavailable</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
</body></html>

请注意,这不涉及外部重定向!我从来没有遇到过搜索引擎的任何问题,但也许这只是因为维护从来没有花很长时间,不确定,我不是 SEO 专家。

可以使用R edirect标志(以及避免重定向循环的非匹配模式)来完成实际重定向:

RewriteRule !^maintenance.php$ /maintenance.php [R=307,L]

如果 URL 尚未指向那里,这将重定向到 /maintenance.php

为了使这一切与应用程序的联系更少,您可以在服务器或虚拟主机配置中定义适当的规则(如果您有权访问它),这是我更喜欢的,因为以这种方式覆盖所有应用程序代码是安全的。