我发现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中,但未触发维护页面并且页面正常加载。
答案 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专家。
使用实际重定向可以使用R
edirect flag(以及不匹配模式来避免重定向循环):
RewriteRule !^maintenance\.php$ /maintenance.php [R=307,L]
如果网址尚未指向此位置,则会重定向到/maintenance.php
。
为了使这一点与应用程序联系更紧密,您可以在服务器或虚拟主机配置中定义适当的规则(如果您有权访问),这是我更喜欢的,因为可以安全地覆盖所有这样的应用程序代码。