Alias Redirect Rewrite~の使い分け

By | 2012/12/11

Apacheで、訪問者のアクセスを振分けて誘導する方法にも色々あるのですが、似たような各機能の違いと使い分けをまとめてみます。

(以下、mod_aliasの機能)

Alias ※confにしか書けません
他の階層にあるファイルをあたかもそこにあるように見せます。
つまり、ブラウザに見えているURLは入力したまま。
AliasMatch ※confにしか書けません
“正規表現”を使ったAliasです。
ブラウザに見えているURLは入力したまま。
Redirect
URLの絶対パス(ドメイン名以降の部分)が、指定した文字列に一致したとき、指定のURLへジャンプします。
ブラウザのURL欄も変わります。
RedirectMatch
URLの絶対パス(ドメイン名以降の部分)が、指定した”正規表現”に一致したとき、指定のURLへジャンプします。
ブラウザのURL欄も変わります。Redirectよりちょっと高級。

(以下、mod_rewriteの機能)

RewriteRule
URLのパスが指定した”正規表現”に一致したとき、指定のURLへジャンプします。
ブラウザのURL欄も変わります。
つまり、単体では上記のRedirectMatchと出来る事はほとんど同じです。
RewriteCond
RewriteRuleより前に記述して、リクエストヘッダーの内容など、URLパス以外の条件で次のRewriteRuleへ進むかどうか振り分けます。ANDやORといった組み合わせ条件も書けるので、かなり複雑な条件で、転送処理ができます。

単純なURLの書き換えだけで済むのであれば、Redirect, RedirectMatch が軽くていいと思います。ちょっと複雑な転送はRewrite、隠れて裏で処理したい場合はAlias、という感じかな?

ここで注意しておかないといけないポイントは、.htaccessに記述する場合です。
mod_alias はドメイン以降のURLの絶対パスで判断します。
mod_rewrite は、それを記述したディレクトリからの相対パスで判断します。

なので、もしサブディレクトリ/tokyo/の中の .htaccess に記述する場合に
RedirectMatch /tokyo/tower_(.*)$ /skytree/$1
RewriteRule tower_(.*)$ /skytree/$1
という違いがあります。

両方を組み合わせ使っていると、よくごっちゃになります。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です