mod_rewrite
httpd
php-fpm

Apache httpdとmod_rewriteとphp-fpmで少しハマった

概要

サイトA(http://hoge.host)にアクセスしてきたとき、一部コンテンツをサイトB(http://fuga.host)にリダイレクトしたかったとき少しハマったので備忘録的にメモしておく。

前提

  • サイトAではApache httpd 2.4とPHPが動作している。
  • サイトAの一部URL(http://hoge.host/a/)にアクセスしたときはサイトAのサーバで処理し、別のURL(http://hoge.host/b/)にアクセスしたときはサイトB(http://fuga.host/b/)に転送させたい。

ここまでであればhttpdとmod_rewriteで問題なかったのだが、httpdのeventモジュールとphp-fpmの設定を追加したタイミングで一部URLのリダイレクトに問題が出ていることが分かった。
具体的にはhttp://hoge.host/b/aaa.jpgは問題ないが、http://hoge.host/b/bbb.phpのようなリクエストの場合に書き換えに失敗していた。

原因と解決

mod_rewriteでの書き換えはwwwrootに設置してある.htaccessで処理していたのが、httpdの設定で先にphp-fpmにcgiで処理を投げていたため、RewriteCondを満たしていてもURLの書き換えが出来ないという状態だった。

以下のようにhttpdの設定ファイルを書き換えることでcgiに投げるURLを制限して解決した。

/etc/httpd/conf.modules.d/01-cgi.conf
...
<IfModule mpm_event_module>
   LoadModule cgid_module modules/mod_cgid.so
   ProxyPassMatch ^/(^b)(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/webroot/$1
</IfModule>
...

あるいはこちらに記載のようにやる。