在Apacheconfiguration(httpd.conf)中,多个<Directory>节是如何工作的?

例如,如果我的'/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. 是不是在第一个<Directory>部分中的RewriteEngine On也应用于第二个<Directory>部分,考虑到后者是一个子目录? 但是我注意到我需要在第二个<Directory>部分添加RewriteEngine On规则。

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

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

Jon Lin对RewriteOptions Inherit指令做了什么的RewriteOptions Inherit是令人大开眼界,并间接地回答了这个问题。

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

相关链接:

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

不,因为“/var/www/example.com/public”(在<Directory /var/www/example.com/public>部分中设置)的所有规则也适用于其子目录,所以不需要复制它们再次进入<Directory /var/www/example.com/public/wp-content/cache/minify>部分。

找出这个很容易。

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

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

然后在“/var/www/example.com/public”和“/var/www/example.com/public/wp-content/cache/minify”目录中放置一个robots.txt文件。 两者都与noindex HTTP标头。