You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess仅将PHP网站前端设为维护模式并开放后台?

实现前端维护模式但允许Admin后台访问的.htaccess配置

嘿,我完全懂你的需求——让网站前端进入维护状态,但所有人都能正常访问admin后台。你之前的代码逻辑确实搞反了,咱们来快速修正:

问题出在哪?

你写的RewriteRule ^admin/.*$ - [F]里的[F]是禁止访问的意思,这就导致admin路径被拦截了,正好和你想要的效果相反。

正确的.htaccess配置方案

以下是两种常用的实现方式,你可以根据自己的需求选择:

方式1:重定向到自定义维护页面

适合需要展示个性化维护界面的场景:

RewriteEngine On

# 优先放行所有admin路径的请求,匹配后直接停止后续规则
RewriteRule ^admin/ - [L]

# 排除已存在的静态文件/目录(比如css、js、图片,避免这些资源也被拦截)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# 将非admin的请求重定向到你的维护页面(比如maintenance.php)
RewriteRule ^(.*)$ /maintenance.php [L]

方式2:返回HTTP 503状态码(符合搜索引擎规范)

这种方式会告诉搜索引擎这是临时维护,不会影响网站权重,同时展示自定义维护页面:

RewriteEngine On

# 放行admin路径请求
RewriteRule ^admin/ - [L]

# 排除静态资源
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# 返回503状态码并指向维护页面
RewriteRule ^(.*)$ /maintenance.php [R=503,L]

# 自定义503错误页面
ErrorDocument 503 /maintenance.php
# 可选:设置重试时间(比如3600秒=1小时)
Header set Retry-After "3600"

关键规则解释

  • RewriteRule ^admin/ - [L]:匹配所有以admin/开头的请求,-表示不做任何重写,[L]标记表示这是最后一条规则,匹配到后就停止处理后续规则,确保admin请求直接通过。
  • 那两个RewriteCond是为了避免静态资源(比如已存在的图片、CSS文件)也被转到维护页面,保证维护页面本身的样式能正常加载。

如果你的维护页面是通过前端路由实现的(比如index.php?url=maintenance),只需要把最后一条RewriteRule改成对应的路径就行。

内容的提问来源于stack exchange,提问作者Narendra Vyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:08:19