Apacheが同じパスの異なるレベルにある.htaccessファイルを実行する順序と、その中の書き換えルールがどのように優先されるかについて、誰かが私に説明できますか?
たとえば、以下の最初の.htaccessの書き換えルールが機能せず、/blog
のルールが優先されるのはなぜですか?
/
の.htaccess
RewriteEngine on
RewriteBase /
RewriteRule ^blog offline.html [L]
/blog
の.htaccess
RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
PS:私は単に答えを探しているのではなく、Apache/mod_rewriteの内部を理解する方法を探しています... whyはこれを修正するためにhowよりも重要です、
Apache Tutorial:.htaccess を読む必要があると思います。主に「ディレクティブの適用方法」セクションで、
.htaccessファイルで見つかった設定ディレクティブは、.htaccessファイルが見つかったディレクトリとそのすべてのサブディレクトリに適用されます。ただし、上位のディレクトリに.htaccessファイルがあった可能性があることも覚えておくことが重要です。ディレクティブは、見つかった順に適用されます。したがって、特定のディレクトリの.htaccessファイルは、ディレクトリツリーの上位にある.htaccessファイルにあるディレクティブをオーバーライドする場合があります。そして、それらは、さらに上位、またはメインサーバー構成ファイル自体にあるディレクティブをオーバーライドしている可能性があります。
それに完全な読み取りを与えると、.htaccessはもう謎になりません。
RewriteOptions inherit
を使用して、親ディレクトリの書き換えルールを継承できます。ただし、親ディレクトリの書き換えルールは、 RewriteOptionsのドキュメント に従って、後で適用されます。