【htaccessがどうしても効かないときの対処法】Apacheのデフォルト設定をチェック!

サーバー

htaccessがどうしても動かないときの対処法をメモしておきます。

要点をまとめ

要点を抽出しておきます。

  • Debian11、Apache 2.4.54では、apache2.confでhtaccessが無効化されていることがある。これが原因でhtaccessが動作しないことが多い。
  • AllowOvedrrideの設定が一切なされていない場合、ApacheではデフォルトでAllowOvedrride Allが適用される。
  • つまり、AllowOverride Allを指定しないとhtaccessが効かない場合は、Apacheの設定ファイルのいずれかにAllowOverrideを無効化する設定が書いてあるので、くまなく探そう。

スポンサーリンク

【STEP1】基本の確認

まずはもう一度、間違いやすいポイントを確認しておく。

  • AllowOverrideはDirectoryセクションでのみ設定できる。LocationやFileなどほかのタグは不可。
  • Directoryタグにはディレクトリのパスを指定する。
  • AllowOverrideを設定する場合は、Directoryパスの指定にワイルドカードは使用できない。<Directory "/var/www/hoge/*">のようなタグの中で書いても設定は無効である。
  • AllowOverrideはコアモジュールで動作するので、モジュールの有効化は不要である。

なお、スペルミスを疑うように促すサイトが多いですが、スペルミスが原因で設定が反映されていない可能性は低いです。理由は設定ファイルにスペルミスがあるとApacheの起動に失敗するから。Apacheが正常に起動できており、エラーが出てなければ、おそらく問題ない。

スポンサーリンク

【STEP2】とりあえずすぐに直したいとき(姑息的手段)

急ぎで直したい方は、htaccessがあるパスのDirectoryタグを追加し、その中にAllowOverride Allと書いておけば、絶対動きます。

例えば、/var/www/html/hoge/.htaccessを効かせたいなら、apacheの設定ファイルに以下のように追記しておけばOK。

<Directory "/var/www/html/hoge">
    AllowOverride All
</Directory

これで絶対動きます。

これでも動かないならエラーログを参照しましょう。.htaccessやApacheの設定ファイルにエラーがあるはずです。

【STEP3】「でも、前はいちいちAllowOverride Allしなくても動いてくれたのに」というとき

まずはApacheの設定ファイルについて復習。

そもそも、Directoryタグの設定は親を継承する

例えば、/var/www/htmlのhtaccessについては、

<Directory "/var/www/html">

にAllowOverrideの記述があれば、それが反映される。

②なければ、

<Directory "/var/www">

にAllowOverrideの記述があれば、それが反映される。

③なければ

<Directory "/var">

にAllowOverrideの記述があれば、それが反映されます。

このように、Apacheでは親のDirectoryタグを辿りながら適用されていきます。

設定がなれければ?

最終的にAllowOverrideの設定が見つからなければどうなるのでしょうか?

最終的に何も記述が無ければ、Apache2.4の仕様により、AllowOverride Allが適用されます。

これはApacheのドキュメントに記載されています。

core – Apache HTTP サーバ バージョン 2.4

今まで動いていたのにhtaccessが効かなくなった・・・

つまり、AllowOverride Allを指定しないと.htaccessが効かない場合は、必ずどこか(親)にAllowOverrideを無効化する設定が書いてあります。

というわけで、Apacheの設定ファイルをくまなくさがしてみましょう。

Debianでは、/etc/apache2/apache2.confの最後にしれっと大本の設定が書いてある。

 # Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

デフォルトの設定ファイルでAllowOverrideが無効になっている。

このように、Debian11、Apache 2.4.54ではデフォルトでhtaccessが完全無効化されている。だから、htaccessを使う時は、ディレクトリごとにAllowOverrideを記述する必要があるのである。

対処法→/etc/apache2/apache2.confのAllowOverride NoneをAllに変えてやればOK。

これで一件落着となる。

コメント

タイトルとURLをコピーしました