测试文件在 DOCUMENT_ROOT 之外是否存在

测试文件在 DOCUMENT_ROOT 之外是否存在

我在 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}用文件的绝对文件系统路径替换。

相关内容