DockerでRewriteRuleを使いたければrewrite_moduleのインストールが必要

ローカル環境の構築でDockerを使っているのですが、先日Docker上で.htaccessのリライトルールを設定しようとしたとき、リライトが走らない問題が発生しました。

サーバーにアップすると問題なく動いていたので、ローカルの設定に問題があることがわかりました。
問題を解明していくなかで、DockerのphpイメージではApacheのrewrite_moduleが無効、もしくはインストールされていないことが判明しました。その解決策をここに書いておきます。

目次

まずはApacheの有効なモジュールを見てみる

Apacheが入っているphpなどのコンテナで下記のコマンドを実行します。

$apachectl -M

コマンドを実行するとモジュールの一覧が表示されますがこの中に「rewrite_module」があるか確認しましょう。

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_prefork_module (shared)
 negotiation_module (shared)
 php7_module (shared)
 reqtimeout_module (shared)
 setenvif_module (shared)
 status_module (shared)

※上記例ではインストール前なので「rewrite_module」は存在しません。

モジュールの後にある「static」と「shared」の意味は下記のとおりです。
static:固定で組み込まれている静的モジュール
shared:実行時に読み込まれる動的モジュール

rewrite_module をインストール

Apacheが入っているphpのコンテナで下記コマンドを実行します。

$a2enmod rewrite

もしくは、Dockerファイルに下記を追記して、ビルドすればrewrite_moduleがインストールされます。

FROM php:7.0-apache
RUN  a2enmod rewrite

再度、「$apachectl -M」でモジュールの一覧を表示するとrewrite_moduleが追加されているはずです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

こんにちは、板川恵司朗です。

目次