たとえば、私の '/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>
質問:
最初のRewriteEngine On
セクションの<Directory>
は、後者がサブディレクトリであることを考えると、2番目の<Directory>
セクションにも適用されるはずではありませんか?しかし、2番目のRewriteEngine On
セクションにも<Directory>
ルールを追加する必要があることに気付きました。
これは、すべての一般的なルールを最初の<Directory>
セクションから2番目の<Directory>
セクションにもコピーする必要があることを意味しますか?たとえば、AllowOverride None
、Options -MultiViews
などです。
1.最初の
RewriteEngine On
セクションの<Directory>
は、2番目の<Directory>
セクションにも適用されるはずではありませんか?後者はサブディレクトリであると考えられますか?しかし、2番目のRewriteEngine On
セクションにも<Directory>
ルールを追加する必要があることに気付きました。
Jon Linによるこの回答RewriteOptions Inherit
ディレクティブの機能は目を見張るものであり、間接的にこの質問に回答します。
"通常、特定のサブディレクトリに.htaccessファイルがある場合、親ディレクトリの[mod_rewrite構成設定]は置き換えられ、適用されません。"
関連リンク:
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>
セクションから2番目の<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>
次に、robots.txtファイルを「/var/www/example.com/public」および「/var/www/example.com/public/wp-content/cache/minify」ディレクトリにドロップしました。どちらもnoindex
HTTPヘッダーで提供されました。