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

ndasle7k  于 2022-11-16  发布在  其他
关注(0)|答案(7)|浏览(123)

我建了一个有60多个页面的网站(PHP)。我现在才意识到(不幸的是)我应该建一个“维护模式”功能,允许管理员暂时禁用网站并将其指向维护模式页面。这将只允许那些以管理员身份登录的人查看网站。
我看到的选项包括:
1.在每个PHP页面的顶部添加一个新的“include”文件。
1.我有一个用于在
每个页面(导航类)。我可以编写维护模式
此类中代码
我还有其他的选择吗?第一个选项看起来不是最有效的,第二个选项看起来是糟糕的编程。有没有其他更好的方法在每个php文件中包含一个新文件?
谢谢你!
ps -网站尚未启动

k0pti3hp

k0pti3hp1#

在维护模式下,您可以使用.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

kzipqqlq

kzipqqlq2#

我知道这是一个老问题,但我添加这个为未来的搜索谁遇到这个网页通过搜索。
我使用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”。这会将所有网站访问者重定向到维护页。
我在没有测试的情况下很快地输入了代码,但它应该能工作。

hvvq6cgz

hvvq6cgz3#

auto_prepend_file字串
指定在主文件之前自动解析的文件的名称。该文件被包括在内,就像它是用require()函数调用的一样,因此使用include_path。
特殊值none会停用自动预先规划。
你可以在php.ini中设置这个,或者在apache(虚拟)主机文件或.htaccess中设置php_flag auto_prepend_file file. php
[or php_管理标志(?)]

编辑

  • 也许你不应该把包含文件放在你的网站根目录或子文件夹中。
  • 记得在最后叫退出或死亡。
rjzwgtxy

rjzwgtxy4#

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

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

任何在浏览器的用户代理字符串末尾加上“MyCrazyString”标签的人都可以访问,其他人都可以访问维护模式页面/站点。
只要不要求高安全性,它就是理想的;快速、容易地传播给管理员,完全可移植,而且重要的是,当唯一具有 * 实际 * 服务器访问权限的人在世界的另一端睡觉时,如果您重新连接DSL,它不会中断。
;o)核心

1wnzp6jl

1wnzp6jl5#

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

vshtjzan

vshtjzan6#

我认为,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>
bogh5gae

bogh5gae7#

如果您是在2020年代访问此页面,请知道此功能现在内置在phpBB ACP(3.2或更高版本)中:
转到ACP > General > Board configuration
并找到这样的行:

禁用板卡:

这将使不是管理员或版主的用户无法使用该讨论板。如果您愿意,您也可以输入一条短消息(255个字符)来显示。
应该有一个单选按钮(开/关)和一个文本输入框,你可以把上述消息。
论坛将继续开放给管理员和版主登录,只是其他人将被排除在外(这也是一个伟大的'紧急开关'的情况下,突然'bot攻击压倒phpBB服务器!).
最后,与上面提到的其他解决方案不同--它们只能在Apache下工作-- * 这个 * 解决方案是在论坛级别实现的,不需要扩展、插件、额外的文件、重定向或特殊的重写。只是对于那些需要 * 简单 * 方法来进行紧急维护的人来说,现在只需单击单选按钮即可。

相关问题