「.htaccessが効かない・・・」
「mod_rewriteが動かない・・・」
「WordPressのパーマリンク設定でエラーが出る・・・」
このような場合には、この記事の内容が参考となります。
この記事では、.htaccessが効かない場合の対策について解説しています。
本記事の内容
- デフォルトで.htaccessは無効です
- AllowOverrideディレクティブにより.htaccessの有効・無効が決定
- オススメする変更方法
それでは、上記に沿って解説していきます。
デフォルトで.htaccessは無効です
基本的には、デフォルトで.htaccessは無効となっています。
だから、設定ファイルを変更しないと.htaccessは有効になりません。
UbuntuにApacheをaptでインストールした場合は、このことは確実です。 この記事では、この構成を前提に説明を進めます。
デフォルトと言うのは、Apacheをインストールしや直後の状態のことです。
まだ、何もApacheの設定ファイルを触っていない状態になります。
まずは、このことを理解しましょう。
だから、デフォルト状態だとmod_rewriteが動かないのは当然です。
その結果として、WordPressでパーマリンク設定がエラーになるのも必然と言えます。
.htaccessは、結構当たり前に利用されています。
そのため、デフォルトで.htaccessが有効だと勘違いするかもしれません。
では、この.htaccessの有効・無効を決めているのは何なのでしょうか?
その正体を次で説明します。
AllowOverrideディレクティブにより.htaccessの有効・無効が決定
.htaccessの有効・無効は、AllowOverrideディレクティブによって決まります。
AllowOverrideディレクティブについての公式の説明は、以下。
Noneを設定すると、.htaccess ファイルは完全に無視されます。
と言うことは、デフォルトではAllowOverrideに「None」が設定されているのです。
また、Allを設定すると、以下のすべてを設定可能にしていることになります。
- AuthConfig
- FileInfo
- Indexes
- Limit
- Options
これらを以下のように個別に設定することもできます。
AllowOverride AuthConfig Indexes
ただ、一般的にはAllと設定することが多いでしょう。
ここまでの内容から、AllowOverrideには「All」を設定すべしとわかりました。
では、一体どこでその設定がなされているのでしょうか?
次は、オススメする変更方法について説明します。
オススメする変更方法
オススメする変更方法を説明する前に、現状の設定を確認します。
そのためには、Apacheの設定ファイルについての理解が必要です。
Apacheの設定ファイルについては、次の記事で説明しています。
設定ファイルに対して、「AllowOverride」で検索を行います。
$ find /etc/apache2 -type f -name "*.conf" | xargs grep "AllowOverride" /etc/apache2/mods-available/userdir.conf: AllowOverride FileInfo AuthConfig Limit Indexes /etc/apache2/mods-available/alias.conf: AllowOverride None /etc/apache2/apache2.conf: AllowOverride None /etc/apache2/apache2.conf: AllowOverride None /etc/apache2/apache2.conf: AllowOverride None /etc/apache2/apache2.conf:# AllowOverride None /etc/apache2/apache2.conf:# for additional configuration directives. See also the AllowOverride /etc/apache2/conf-available/serve-cgi-bin.conf: AllowOverride None /etc/apache2/conf-available/security.conf:# AllowOverride None
この結果より、「/etc/apache2/apache2.conf」にデフォルトの設定があることがわかります。
そして、その内容は以下。
「/var/www/html」がドキュメントルートであれば、次のように変更してもOKです。
AllowOverrideの「None」を「All」に変更しています。
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
しかし、基本的には「apache2.conf」は触らないでおきましょう。
オススメは、次のファイルの変更となります。
/etc/apache2/sites-available/000-default.conf
通常、サイト毎の設定はこのファイルに記述します。
追加する内容と場所は、以下。
Directoryディレクティブのパスが「/var/www/html」であることに注意してください。
もちろん、AllowOverrideは「None」から「All」に変更。
この変更は、Apacheの再起動により反映させます。
$ sudo systemctl restart apache2
動作確認には、以下の.htaccessを用意しましょう。
.htaccess
Redirect /example/ https://example.com/
この.htaccessをドキュメントルートに設置します。
そして、次のURLにアクセス。
http://サーバーIP/example/
次のページに転送されれば、.htaccessは有効です。
以上、オススメする変更方法を説明しました。
なお、オススメと言っても、あくまでAllowOverrideに関しての話です。
Optionsディレクティブが、上記の例のままだとヤバイと言えます。
なぜヤバイのかは、次の記事で説明しています。
Apacheセキュリティ対策に取り組むなら、是非とも次の記事をご覧ください。