RewriteRuleとRedirectの違い【Apache】

どちらもリダイレクトするのに使うディレクティブですが、機能は全然違います。

Redirect RewriteRule
モジュールが必要? 不要 mod_rewrite.cが必要
リダイレクト後のURLは? 変わる

(HTTPレスポンスで301リダイレクトを返す)

変わらない

(サーバーで内部的にリダイレクトされる)

機能の豊富さは? リダイレクトするだけ 多い

 

図解すると以下のような感じ。

RewriteRuleとRedirectの違い

 

使い分けとしては

  • サイトを引っ越し(ドメインの変更)した場合
    Redirect
  • サイトを引っ越ししたけど、URLは従来のまま表示させたい場合
    RewriteRule

みたいな感じだと思います。

ただ、RewriteRuleでもオプションで[R]とつければ、Redirectと同じ動作になります。なのでRewriteRuleのほうが上位互換といえます。

 

RewriteRuleのほうは機能が多すぎて、全部把握するのはかなりキツイと思われるので

以下のような記事にあるような「すでにあるテンプレ的な書き方」を参考にして、自分のやりたいことを実現するのがベストだと思います。

参考URLの正規化(mod_rewriteによるリダイレクト) | ADAMレンタルウェブ

 

ちなみに呼び名としては

  • RewriteRuleのような「同じサーバー内で別の場所にリダイレクトすること」を
    →内部転送(Internal  Forwarding/インターナルリフォワーディング)と呼ぶ
  • Redirectのような「ここに行け」的なリダイレクト方法のことを
    外部転送(エクスターナルフォワーディング/External Forwarding)と呼ぶ。
    →これのことを俗にリダイレクトと呼ぶ。

という感じで呼ぶらしいです。

参考リダイレクトとフォワードの違いを知る:JavaTips ~JSP/サーブレット編 – @IT

 

ただ、内部転送のほうも、Apacheのログを見てみると「インターナルリダイレクト」と書かれていたので↓

呼び名はどっちでもいいのかもしれません。

  • 外部にリダイレクトする場合
    →リダイレクト、外部転送 のいずれか
  • 内部にリダイレクトする場合
    →リダイレクト、内部リダイレクト、内部転送 のいずれか

 

 

 

おわり

Linux
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました