8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

apache2.2から2.4へのアップグレード時にmod_rewriteでハマった

Last updated at Posted at 2017-09-04

apache2.2から2.4へアップグレードするときに、mod_rewriteの動作に違うところがあって、はまりました。

問題概要

以下がapache2.2での簡単な動作環境の概要図です。
内部サーバにプロキシしており、/へのアクセスをすべて/data/以下に集めています。

apache2.2.PNG

.htaccessに以下の内容で記載しています。

RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*) http://server1.internal/data/$1 [L,P,QSA]

apache2.4では同じ設定で以下の動きになります。
apache2.4.PNG

なぜか、proxy後にindex.htmlが付与されます。

パッと見、mod_dirが効いてしまっているようですが、apache2.2と2.4で動きが異なります。
2.4ではプロキシでrewriteするときに同時にindex.htmlが付与されてしまい、2.2ではついていませんでした。

対応策

先に結論を書きますと、以下の記述をすることで解決します。

DirectoryCheckHandler ON

これをapache2.4で記載すると上記の問題が解決します。

再現する環境について

apache2.4にて、mod_rewriteを設定してプロキシを行い、さらにmod_dirのモジュールがONになってDirectoryIndexに設定しているときに再現します。DirectoryIndexがindex.phpとかだったら/が/index.phpへリライトされます。

apache2.2から2.4にアップグレードしたときにこの動きになってしまっているようです。

*) mod_dir: Add DirectoryCheckHandler to allow a 2.2-like behavior, skipping
execution when a handler is already set. PR53929. [Eric Covener]

*) mod_dir: Don't search for a DirectoryIndex or DirectorySlash on a URL
that was just rewritten by mod_rewrite. PR53929. [Eric Covener]

引用元:https://www.apache.org/dist/httpd/CHANGES_2.4

まぁindex.htmlがつくのは良さそうな気もしますが。

他、tomcatとかでlocalhost:8080とかにプロキシするときにindex.htmlが勝手に付与されて見れなくなった、という現象が報告されてから急遽このオプションが追加されたっぽいです。
参考文献:https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1394403

apache2.2から2.4へアップグレードするときに念のために気を付けておいた方がよいですね。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?