「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の有効化について説明しました。