如何在已建立的网站上实施“维护模式”

时间:2009-09-08 23:19:55

标签: php .htaccess redirect include maintenance-mode

我已经建立了一个超过60页的网站(PHP)。我现在才意识到(不幸的是)我应该建立一个“维护模式”功能,允许管理员暂时禁用网站并将其指向维护模式页面。这只会允许以管理员身份登录的人查看网站。

我看到的选项是:

  1. 在每个PHP页面的顶部添加一个新的“include”文件。

  2. 我有一个用于显示左侧导航栏的包含 每一页(导航类)。我可以写维护模式
    本课程中的代码。

  3. 我还有其他选择吗?第一个选项看起来不是最有效的,第二个看起来好像编程错误。还有其他更好的方法在每个php文件中包含一个新文件吗?

    谢谢!

    ps - 该网站尚未启动

6 个答案:

答案 0 :(得分:19)

在维护模式下,您可以使用.htaccess重定向到其他页面。

三个例子:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteRule ^(.*)$ http://domain.com/maintenance.html [R=307,L]

.htaccess “Down For Maintenance” Page Redirect

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$ 
RewriteCond %{REMOTE_HOST} !^888\.888\.888\.888

RewriteRule $ /maintenance.html [R=302,L] 

Redirect to maintenance page during upgrade using .htaccess

# redirect all visitors to alternate site but retain full access for you
ErrorDocument 403 http://www.alternate-site.com
Order deny,allow
Deny from all
Allow from 99.88.77.66

Maintenance mode for apache

答案 1 :(得分:7)

我知道这是一个古老的问题,但我正在为通过搜索来到此页面的未来搜索者添加此内容。

我使用PHP重定向。

在每个页面的顶部添加以下行:

<?php
include('PATH/TO/FILE/config.php');
if(maintenance == 1) {
header('Location: http://example.com/maintenance.php');
}
else {
// do nothing
}
?>

在你的config.php文件中只需创建一个像这样的变量

$maintenance = 0; // turns maintenance mode off

当您希望站点处于维护模式时,只需将“0”更改为“1”即可。 这会将您的所有网站访问者重定向到维护页面。

我在没有测试的情况下非常快速地键入了该代码,但它应该可以正常工作。

答案 2 :(得分:3)

auto_prepend_file字符串

指定在主文件之前自动解析的文件的名称。包含该文件就像使用require()函数调用它一样,因此使用了include_path。

特殊值none禁用自动前置。

你可以在php.ini中设置它,或者在apache(虚拟)主机文件或.htaccess中使用php_flag auto_prepend_file file.php

[或php_admin_flag(?)]

修改

  • 也许您不应该将包含文件放在您的web根目录或子文件夹中。
  • 记得在结束时叫出口或死亡。

答案 3 :(得分:2)

您可以在RewriteCond中检查HTTP_USER_AGENT,而不是指定IP地址。

RewriteCond %{HTTP_USER_AGENT} !MyCrazyString
RewriteCond %{THE_REQUEST} !upgrade\.txt
RewriteRule .* /upgrade.txt [R=307,L]

任何标有“浏览器用户代理”字符串末尾的“MyCrazyString”的人都可以访问,其他人都可以访问维护模式页面/站点。

只要不需要高安全性,它就是理想的;快速,轻松地向管理员传播,完全可移植,而且重要的是,如果您重新连接DSL,当唯一拥有实际服务器访问权限的人在世界的另一端睡着时,将不会中断。

; o)Cor

答案 4 :(得分:0)

最简单的方法是集中一些关于网站生成的逻辑。这样,您可以打开维护模式并将任何非管理员重定向到其他页面。这并不难,因为我想你有一些代码可以不断弹出,所以只需扩展登录功能就可以检查全局变量(如果你的页面中没有任何常见的全局变量)你可以通过setenv在.htaccess中设置它。

答案 5 :(得分:0)

我认为standard Apache expressionsrewrite rules更容易理解。

在维护之前,我将文件 / home / coolcmd / site_maintenance_off 重命名为 / home / coolcmd / site_maintenance_on

/.htaccess的代码段:

# If file, directory or symlink /home/coolcmd/site_maintenance_on exists,
# and requested file is not /maintenance.html,
# and not an admin's IP...
<If "-e '/home/coolcmd/site_maintenance_on' && %{REQUEST_URI} != '/maintenance.html' && %{REMOTE_ADDR} != '111.111.111.111'">
# Generate status code 503 for URL beginning with /, in other words for ANY URL.
# This is not "the real redirection 3xx".
Redirect 503 "/"
# This page handles status code 503. All external resources used by page
# (for example, maintenance.css), if any, must be added to <if> above.
ErrorDocument 503 /maintenance.html
# Maintenance probably will end in 10 minutes.
Header set Retry-After 600
</If>