RewriteRuleとRedirectの違い【Apache】

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

RedirectRewriteRule
モジュールが必要?不要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生まれ。
2019年くらいからフロントエンドエンジニアを目指している元アフィリエイターです💩

penpenをフォローする
penpenをフォローする
penpenメモ

コメント

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