多倍部分在 Apache 配置(httpd.conf)中起作用吗?

多倍部分在 Apache 配置(httpd.conf)中起作用吗?

例如,如果我的“/etc/apache2/httpd.conf”如下所示:

<Directory />
    AllowOverride None
</Directory>

<Directory /home>
    AllowOverride FileInfo
</Directory>

后一条AllowOverride规则将覆盖目录的前一条规则/home。这部分很清楚。

但是如果我的 httpd.conf 文件看起来像这样会发生什么?

<Directory /var/www/example.com/public>

    AllowOverride None
    Options -MultiViews

    <IfModule mod_rewrite.c>

        RewriteEngine On
        RewriteBase /

        [...]

    </IfModule>

    [...]

</Directory>

<Directory /var/www/example.com/public/wp-content/cache/minify>
    <IfModule mod_rewrite.c>

        # WHY IS 'RewriteEngine On' REQUIRED?
        RewriteEngine On

        RewriteBase /wp-content/cache/minify/
        RewriteRule [...]

    </IfModule>
</Directory>

问题:

  1. 考虑到第二部分是子目录,RewriteEngine On第一部分中的是否也<Directory>应该适用于第二部分?但我注意到我也需要在第二部分中添加规则。<Directory>RewriteEngine On<Directory>

  2. 这是否意味着我也应该将第一部分的所有通用规则复制<Directory>到第二<Directory>部分?例如,,AllowOverride NoneOptions -MultiViews

答案1

1.考虑到第二部分是子目录,RewriteEngine On第一<Directory>部分中的 是否也适用于第二部分?但我注意到我也需要在第二部分中添加规则。<Directory>RewriteEngine On<Directory>

Jon Lin 的回答该指令的作用RewriteOptions Inherit令人大开眼界,并间接回答了这个问题。

“通常情况下,如果您在特定的子目录中有一个 .htaccess 文件,则父目录中的任何 [mod_rewrite 配置设置] 都将被取代并且不会应用。”

相关链接:

2. 这是否意味着我也应该将第一部分的所有通用规则复制<Directory>到第二<Directory>部分?例如AllowOverride None,,,Options -MultiViews等等。

不,由于 '/var/www/example.com/public' 的所有规则(在<Directory /var/www/example.com/public>部分中设置)也适用于其子目录,因此无需再次将它们复制到<Directory /var/www/example.com/public/wp-content/cache/minify>部分中。

发现这一点很容易。

我在<Directory /var/www/example.com/public>httpd.conf 的部分中添加了以下内容:

<IfModule mod_headers.c>    
    # Set noindex header for robots.txt
    <FilesMatch "robots.txt">
        Header set X-Robots-Tag "noindex"
    </FilesMatch>
</IfModule>

然后将 robots.txt 文件放入 '/var/www/example.com/public' 和 '/var/www/example.com/public/wp-content/cache/minify' 目录中。两者都带有noindexHTTP 标头。

相关内容