【Apache】mod_rewriteを有効化する方法

【Apache】mod_rewriteを有効化する方法 サーバー

「mod_rewriteを有効にしたい」
「.htaccessでリダイレクトが機能しない・・・」
「Internal Server Errorが出てしまう・・・」

このような場合には、この記事の内容が参考になります。
この記事では、Apacheでmod_rewriteを有効化する方法を解説しています。

本記事の内容

  • デフォルトでmod_rewriteは無効化されている
  • mod_rewriteの有効化

それでは、上記に沿って解説していきます。

デフォルトでmod_rewriteは無効化されている

通常、デフォルトでmod_rewriteは無効化されています。
正確には、mod_rewriteモジュールがロードされていないと言えます。

次の構成パターンで検証しています。

mod_rewriteの無効化を確認するために、次のコマンドが利用できます。

apache2ctl -M

上記コマンドを実行した結果は、以下。

$ apache2ctl -M  
Loaded Modules: 
 core_module (static) 
 so_module (static) 
 watchdog_module (static) 
 http_module (static) 
 log_config_module (static) 
 logio_module (static) 
 version_module (static) 
 unixd_module (static) 
 access_compat_module (shared) 
 alias_module (shared) 
 auth_basic_module (shared) 
 authn_core_module (shared) 
 authn_file_module (shared) 
 authz_core_module (shared) 
 authz_host_module (shared) 
 authz_user_module (shared) 
 autoindex_module (shared) 
 deflate_module (shared) 
 dir_module (shared) 
 env_module (shared) 
 filter_module (shared) 
 mime_module (shared) 
 mpm_event_module (shared) 
 negotiation_module (shared) 
 reqtimeout_module (shared) 
 setenvif_module (shared) 
 status_module (shared)

これでは探すのが面倒なので、以下を利用した方が効率的です。

apache2ctl -M | grep 'rewrite'

デフォルトの状態では、何もヒットしません。
つまり、mod_rewriteモジュールがロードされていないということです。

そのため、次のような内容の.htaccessもデフォルトでは動きません。

RewriteEngine on 
RewriteBase / 
RewriteCond %{REQUEST_URI} ^.*/index\.html$ 
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]

この場合には、「Internal Server Error」が出ることになります。

もちろん、この場合にはWordPressのパーマリンク設定も機能しません。

では、デフォルトで無効化されているmod_rewriteを有効化するにはどうすればよいのでしょうか?
その方法を次で説明します。

mod_rewriteの有効化

Ubuntuの場合であれば、次のコマンドを実行するだけです。

sudo a2enmod rewrite

上記コマンドを実行すると、以下のように表示されます。

$ sudo a2enmod rewrite 
Enabling module rewrite. 
To activate the new configuration, you need to run: 
  systemctl restart apache2

この変更を反映するには、Apacheを再起動しろとのことです。
Apacheの再起動は、次のコマンドで行います。

$ sudo systemctl restart apache2

再起動が完了したら、mod_rewriteが有効化されているか確認しましょう。

$ apache2ctl -M | grep 'rewrite' 
 rewrite_module (shared)

今度は、ヒットしました。
これでmod_rewriteが有効化されていると言えます。

それでは、上述した.htaccessの動作確認を行います。

.htaccess

RewriteEngine on 
RewriteBase / 
RewriteCond %{REQUEST_URI} ^.*/index\.html$ 
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]

この.htaccessをドキュメントルートに設置します。
その状態で次のURLにアクセス。

 http://サーバーIP/index.html

このURLにアクセスすると、次のページに転送されます。

この画面が確認できれば、mod_rewriteの動作確認はOKです。

なお、サーバーのIPアドレスを確認する方法については、次の記事で説明しています。

以上、mod_rewriteの有効化について説明しました。

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