どちらもリダイレクトするのに使うディレクティブですが、機能は全然違います。
| 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のログを見てみると「インターナルリダイレクト」と書かれていたので↓

呼び名はどっちでもいいのかもしれません。
- 外部にリダイレクトする場合
→リダイレクト、外部転送 のいずれか - 内部にリダイレクトする場合
→リダイレクト、内部リダイレクト、内部転送 のいずれか
おわり
コメント