12

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

我看到的选项是:

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

  2. 我有一个包含用于在
    每个页面上显示导航栏(导航类)。我可以在这个类中编写维护模式
    代码。

我还有其他选择吗?第一个选项似乎不是最有效的,第二个似乎是糟糕的编程。还有其他更好的方法可以在每个 php 文件中包含一个新文件吗?

谢谢!

ps - 该网站尚未启动

4

6 回答 6

20

您可以.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 “停机维护” 页面重定向

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

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

在升级期间使用 .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

apache的维护模式

于 2009-09-08T23:26:43.253 回答
8

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

我使用 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”。这会将您的所有网站访问者重定向到维护页面。

我在没有测试的情况下很快输入了该代码,但它应该可以工作。

于 2013-06-10T20:03:45.093 回答
3

auto_prepend_file字符串

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

特殊值 none 禁用自动前置。

您可以在 php.ini 或 apache(虚拟)主机文件或 .htaccess 中使用 php_flag auto_prepend_file file.php 进行设置

[或 php_admin_flag (?)]

编辑

  • 也许您不应该将包含文件放在您的 Web 根目录或子文件夹中。
  • 并记得在最后调用退出或死亡。
于 2009-09-08T23:35:58.803 回答
2

除了指定 IP 地址,您还可以在 RewriteCond.. 中检查 HTTP_USER_AGENT。

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

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

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

;o) 心电图

于 2013-12-02T21:50:48.660 回答
0

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

于 2009-09-08T23:35:11.987 回答
0

我认为,标准的 Apache 表达式比重写规则更容易理解。

在维护之前,我将文件/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>
于 2015-04-25T15:24:19.620 回答