.htaccessが効かない場合の対策【Ubuntu】

.htaccessが効かない場合の対策【Ubuntu】 サーバー

「.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セキュリティ対策に取り組むなら、是非とも次の記事をご覧ください。

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