Apache-2.2

多個 <Directory> 部分如何在 Apache 配置 (httpd.conf) 中工作?

  • October 21, 2013

例如,如果我的 ‘/etc/apache2/httpd.conf’ 看起來像這樣:

&lt;Directory /&gt;
   AllowOverride None
&lt;/Directory&gt;

&lt;Directory /home&gt;
   AllowOverride FileInfo
&lt;/Directory&gt;

後一個AllowOverride規則覆蓋/home目錄的前身。那部分很清楚。

但是如果我的 httpd.conf 文件看起來像這樣會發生什麼?

&lt;Directory /var/www/example.com/public&gt;

   AllowOverride None
   Options -MultiViews

   &lt;IfModule mod_rewrite.c&gt;

       RewriteEngine On
       RewriteBase /

       [...]

   &lt;/IfModule&gt;

   [...]

&lt;/Directory&gt;

&lt;Directory /var/www/example.com/public/wp-content/cache/minify&gt;
   &lt;IfModule mod_rewrite.c&gt;

       # WHY IS 'RewriteEngine On' REQUIRED?
       RewriteEngine On

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

   &lt;/IfModule&gt;
&lt;/Directory&gt;

問題:

  1. 考慮到後者是子目錄,RewriteEngine On第一部分中的不&lt;Directory&gt;應該也適用於第二部分嗎?&lt;Directory&gt;但我注意到我還需要RewriteEngine On在第二&lt;Directory&gt;部分添加規則。
  2. 這是否意味著我也應該將所有通用規則從第一&lt;Directory&gt;部分複製到第二&lt;Directory&gt;部分?例如, AllowOverride None,Options -MultiViews等。

1.考慮到第二部分是子目錄,RewriteEngine On第一&lt;Directory&gt;部分中的不應該也適用於第二部分嗎?&lt;Directory&gt;但我注意到我還需要RewriteEngine On在第二&lt;Directory&gt;部分添加規則。

Jon LinRewriteOptions Inherit指令的作用的回答令人大開眼界,並間接回答了這個問題。

“通常,如果您在特定子目錄中有一個 .htaccess 文件,則任何$$ mod_rewrite configuration settings $$在父目錄中被取代並且不會被應用。”

相關連結:

  1. 這是否意味著我也應該將第一&lt;Directory&gt;部分的所有通用規則復製到第二&lt;Directory&gt;部分?例如, AllowOverride None,Options -MultiViews等。

不,因為 ‘/var/www/example.com/public’ 的所有規則(在&lt;Directory /var/www/example.com/public&gt;部分中設置)也適用於其子目錄,因此無需將它們再次復製到&lt;Directory /var/www/example.com/public/wp-content/cache/minify&gt;部分中。

發現這一點很容易。

&lt;Directory /var/www/example.com/public&gt;我在httpd.conf 的部分中添加了這個:

&lt;IfModule mod_headers.c&gt;    
   # Set noindex header for robots.txt
   &lt;FilesMatch "robots.txt"&gt;
       Header set X-Robots-Tag "noindex"
   &lt;/FilesMatch&gt;
&lt;/IfModule&gt;

然後在“/var/www/example.com/public”和“/var/www/example.com/public/wp-content/cache/minify”目錄中放置一個 robots.txt 文件。兩者都帶有noindexHTTP 標頭。

引用自:https://serverfault.com/questions/541014