0

我发现这篇关于如何创建“停机维护”页面的帖子,但我在让它正常工作时遇到了一些麻烦。

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 地址不会被 cake 检测到。我输入echo $_SERVER['REMOTE_ADDR']了,它只显示 ::1。我也尝试使用我的 user_id,但出现以下错误Class 'AuthComponent' not found in...

我尝试将它放在 /index.php 和 /App/index.php 中,但维护页面没有被触发并且页面加载正常。

4

1 回答 1

1

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

这是一个示例,它将所有不来自的访问尝试重定向127.0.0.1maintenance.php与文件相同的文件夹中.htaccess

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 专家。

可以使用Redirect 标志来使用实际的重定向(以及避免重定向循环的不匹配模式):

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

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

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

于 2013-10-20T12:31:36.550 回答