読者です 読者をやめる 読者になる 読者になる

mod_rewriteの設定はバーチャルホスト毎に書く

Apachemod_rewriteが適用されないので調べると設定が以下のようになっていた。

Listen 80
Listen 443

Include conf/extra/proxy-ajp.conf # ProxyPassが設定されている
Include conf/extra/rewrite.conf   # RewriteRuleが設定されている

<VirtualHost _default_:443>
  SSLEngine On
  ...
</VirtualHost>

SSLでアクセスすると ProxyPass の設定は適用されるが RewriteRule が適用されない。

mod_rewriteはバーチャルホスト毎に設定する必要があるようで、以下のようにするとSSLでrewriteが動作した。

Listen 80
Listen 443

Include conf/extra/proxy-ajp.conf
Include conf/extra/rewrite.conf

<VirtualHost _default_:443>
  SSLEngine On
  ...
  Include conf/extra/rewrite.conf
</VirtualHost>

バーチャルホスト毎に設定する必要性は理解できる。同様にLocationやProxyPassの設定もバーチャルホスト毎に設定が独立しているべきだと思うのだが、そうなっていないのは何か理由があるのだろうか。