mod_rewriteの備忘録

対象

環境: Apache HTTP Server 2.2

※ おそらく2.4も同じでは….?

コンテキスト

2種類ある

  • per-server configuration: httpd.conf 等のconfファイルや <Virtualhost> ディレクティブ内に直書きのルール
  • per-directory configuration: <Directory> ディレクティブ内や .htaccess に書かれたルール

contextによって、RewriteRule のパターンマッチングの挙動等に細かい違いがある。

例: パターンマッチングの挙動

処理順序

冷静に考えると当然だが、per-server configuration のほうが先に処理される。

So, after a request comes in and Apache has determined the corresponding server (or virtual server) the rewriting engine starts processing of all mod_rewrite directives from the per-server configuration in the URL-to-filename phase. A few steps later when the final data directories are found, the per-directory configuration directives of mod_rewrite are triggered in the Fixup phase.

Apache mod_rewrite Technical Details

RewriteRule の継承

サブディレクトリの .htaccessRewriteRule を書くと、親ディレクトリの .htaccess に書かれた RewriteRule は効かなくなる。

親ディレクトリのリライトルールを継承させるには、RewriteOptions inherit の設定が必要。

参考:

その他

.htaccess については、対象パスの .htaccess をリクエスト毎に動的に探索するため、原理的に若干遅くなる (21世紀の今日に心配するレベルかは….)。