Docker の php:5.6-apache で .htaccess を有効にするまでの手順と学んだこと

スポンサードリンク


やりたいこと

Docker の php:5.6-apache で、.htaccess を有効にしたいです。mod_rewrite を有効にしたい、と言えますね。

実現するには

の通りにすればできました!

今回、実現するにあたって、学んだことをノートします。

Docker の php:5.6-apache で、.htaccess を有効にするまでにやったこと

php:5.6-apache の Dockerfile で、次のようにしました。

  • a2enmod rewrite を実行し、mod_rewrite を有効にした。
    − mod_rewrite を適用する設定を加えた /etc/apache2/sites-available/000-default.conf に差し替えた。

他に、今回のやりたいことではありませんが、次のことも行いました。

From php:5.6-apache
RUN apt-get update \
&& docker-php-ext-install pdo_mysql mysqli mbstring \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& a2enmod rewrite
COPY ./php.ini /usr/local/etc/php/
COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf

$ git diff appweb/Dockerfile
diff --git a/docker-l-a24-m56-p56/appweb/Dockerfile b/docker-l-a24-m56-p56/appweb/Dockerfile
index 34e7a8d..c3a3e42 100644
--- a/docker-l-a24-m56-p56/appweb/Dockerfile
+++ b/docker-l-a24-m56-p56/appweb/Dockerfile
@@ -1,3 +1,8 @@
 From php:5.6-apache
-RUN docker-php-ext-install pdo_mysql mysqli mbstring
+RUN  apt-get update \
+&& docker-php-ext-install pdo_mysql mysqli mbstring \
+&& apt-get clean \
+&& rm -rf /var/lib/apt/lists/* \
+&& a2enmod rewrite
 COPY ./php.ini /usr/local/etc/php/
+COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf
$

/etc/apache2/sites-available/000-default.conf の内容は次のようにしました。

<VirtualHost *:80>
	<Directory /var/www/html>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Require all granted
	</Directory>

	# The ServerName directive sets the request scheme, hostname and port that
	# the server uses to identify itself. This is used when creating
	# redirection URLs. In the context of virtual hosts, the ServerName
	# specifies what hostname must appear in the request's Host: header to
	# match this virtual host. For the default virtual host (this file) this
	# value is not decisive as it is used as a last resort host regardless.
	# However, you must set it for any further virtual host explicitly.
	#ServerName www.example.com

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html

	# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
	# error, crit, alert, emerg.
	# It is also possible to configure the loglevel for particular
	# modules, e.g.
	#LogLevel info ssl:warn

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	# For most configuration files from conf-available/, which are
	# enabled or disabled at a global level, it is possible to
	# include a line for only one particular virtual host. For example the
	# following line enables the CGI configuration for this host only
	# after it has been globally disabled with "a2disconf".
	#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

以下、編集前との違いです。

$ diff -up 000-default.conf.org 000-default.conf
--- 000-default.conf.org	2018-08-24 08:01:11.000000000 +0900
+++ 000-default.conf	2018-08-23 08:09:45.000000000 +0900
@@ -1,4 +1,10 @@
 <VirtualHost *:80>
+	<Directory /var/www/html>
+		Options Indexes FollowSymLinks MultiViews
+		AllowOverride All
+		Require all granted
+	</Directory>
+
 	# The ServerName directive sets the request scheme, hostname and port that
 	# the server uses to identify itself. This is used when creating
 	# redirection URLs. In the context of virtual hosts, the ServerName
$

加えた設定の内容です。

あとはビルドして起動して確認すれば完了です。

docker-compose build
docker-compose up -d

以下、他に勉強になったことです。

php:apache の Apache はどのような環境で動いているか?

上記参考ページを読んでいると、どうやら php:apache は Debian だそうです。Debian のバージョンを調べてみました。

バージョン確認

# cat /etc/issue
Debian GNU/Linux 9 \n \l

#

なるほど、確かに、Debian ですね。

参考ページ

Apache のバージョン確認

# apache2 -v
Server version: Apache/2.4.25 (Debian)
Server built:   2018-06-02T08:01:13
#

Apache のモジュール一覧を確認。

# apachectl -M
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.240.3. Set the 'ServerName' directive globally to suppress this message
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)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
# 

参考ページ

おわりに

をやってみたところ、できなかったため今回の投稿となりました。

Debian ディストリビューションでの Apache は初めてでしたし、Apache の設定、大分忘れていたので良い復習になりました♪

以上です。

コメントを残す