どちらもリダイレクトするのに使うディレクティブですが、機能は全然違います。
Redirect | RewriteRule | |
---|---|---|
モジュールが必要? | 不要 | mod_rewrite.cが必要 |
リダイレクト後のURLは? | 変わる
(HTTPレスポンスで301リダイレクトを返す) |
変わらない
(サーバーで内部的にリダイレクトされる) |
機能の豊富さは? | リダイレクトするだけ | 多い |
図解すると以下のような感じ。
使い分けとしては
- サイトを引っ越し(ドメインの変更)した場合
→Redirect
- サイトを引っ越ししたけど、URLは従来のまま表示させたい場合
→RewriteRule
みたいな感じだと思います。
ただ、RewriteRule
でもオプションで[R]
とつければ、Redirect
と同じ動作になります。なのでRewriteRule
のほうが上位互換といえます。
RewriteRule
のほうは機能が多すぎて、全部把握するのはかなりキツイと思われるので
以下のような記事にあるような「すでにあるテンプレ的な書き方」を参考にして、自分のやりたいことを実現するのがベストだと思います。
参考:URLの正規化(mod_rewriteによるリダイレクト) | ADAMレンタルウェブ
ちなみに呼び名としては
- RewriteRuleのような「同じサーバー内で別の場所にリダイレクトすること」を
→内部転送(Internal Forwarding/インターナルリフォワーディング)と呼ぶ
- Redirectのような「ここに行け」的なリダイレクト方法のことを
→外部転送(エクスターナルフォワーディング/External Forwarding)と呼ぶ。
→これのことを俗にリダイレクトと呼ぶ。
という感じで呼ぶらしいです。
参考:リダイレクトとフォワードの違いを知る:JavaTips ~JSP/サーブレット編 – @IT
ただ、内部転送のほうも、Apacheのログを見てみると「インターナルリダイレクト」と書かれていたので↓
呼び名はどっちでもいいのかもしれません。
- 外部にリダイレクトする場合
→リダイレクト、外部転送 のいずれか - 内部にリダイレクトする場合
→リダイレクト、内部リダイレクト、内部転送 のいずれか
おわり
コメント