例如,如果我的'/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>
问题:
是不是在第一个<Directory>部分中的RewriteEngine On也应用于第二个<Directory>部分,考虑到后者是一个子目录? 但是我注意到我需要在第二个<Directory>部分添加RewriteEngine On规则。
这是否意味着我也应该将第一个<Directory>部分的所有常用规则复制到第二个<Directory>部分? 例如, AllowOverride None , Options -MultiViews等。
1.是否
RewriteEngine On在第一个<Directory>部分应该应用于第二个<Directory>部分,考虑到后者是一个子目录? 但是我注意到我需要在第二个<Directory>部分添加RewriteEngine On规则。
Jon Lin对RewriteOptions Inherit指令做了什么的RewriteOptions Inherit是令人大开眼界,并间接地回答了这个问题。
“通常情况下,如果在特定的子目录中有一个.htaccess文件,父目录中的任何[mod_rewriteconfiguration设置]将被取代,并且不会被应用。”
相关链接:
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#vhosts
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>部分。
找出这个很容易。
我在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标头。