我在 DOCUMENT_ROOT 中有一个 .htaccess 文件,它会检查文件 Maintenance.enable 是否存在,如果存在则提供 Maintenance.html 服务:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# This portion checks for the presence of maintenance.enable to toggle
# maintenance mode
RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
RewriteCond %{DOCUMENT_ROOT}/maintenance.enable -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /maintenance.html [R=503,L]
ErrorDocument 503 /maintenance.html
Header Set Cache-Control "max-age=0, no-store"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
但是,它似乎在 DOCUMENT_ROOT 之外不起作用。例如,假设我有一个这样的文件夹结构:
document_root/
.htaccess
index.php
maintenance.html
maintenance.enable
test/
.htaccess
index.php
maintenance.enable
maintenance.html
outside_document_root/
.htaccess
index.php
maintenance.html
maintenance.enable
该文件夹outside_document_root
在 conf 文件中定义为别名。
答案1
首先,.htaccess
如果您有权访问配置文件,则根本不应该使用它,因为它会降低 Apache 的速度。您可以将所有这些设置都放在配置文件中。
配置.htaccess
适用于文件夹及其子文件夹。您应该将此<IfModule mod_rewrite.c>
块放在指令内<virtualHost>
,以将其应用于整个 VirtualHost,包括由别名定义的文件夹。
如果您.htaccess
仍然愿意使用,您可以%{DOCUMENT_ROOT}
用文件的绝对文件系统路径替换。