CakePHP“维护”页面

时间:2013-10-20 03:50:58

标签: php cakephp

我发现this帖子有关如何创建“关闭维护”页面,但我在使其正常工作方面遇到了一些麻烦。

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中,但未触发维护页面并且页面正常加载。

1 个答案:

答案 0 :(得分:1)

我通常使用的是mod_rewrite,这种方式与我的应用程序代码无关。

以下是一个示例,它将所有非127.0.0.1的访问尝试重定向到与maintenance.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 flag(以及不匹配模式来避免重定向循环):

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

如果网址尚未指向此位置,则会重定向到/maintenance.php

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