我在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文件中的别名。
起初,如果你有权访问configuration文件,就不应该使用.htaccess ,因为它会降低Apache的性能。 您可以在configuration文件中包含所有这些设置。
.htaccessconfiguration适用于文件夹,它是子文件夹。 您应该在<virtualHost>指令中包含<IfModule mod_rewrite.c>块,以将其应用于整个VirtualHost,包括由别名定义的文件夹。
如果您更喜欢使用.htaccess ,则可以将%{DOCUMENT_ROOT}replace为%{DOCUMENT_ROOT}的绝对文件系统path。