URLの転送設定をしようとするとリダイレクト(Redirect)とリライト(Rewrite)という言葉を目にしませんか?
リダイレクトとリライトはどちらもURLの転送を行いますが、処理としてはどのような違いがあるのでしょうか?
この記事ではリダイレクトとリライトの処理の違いや使い分けを解説します。
また転送の設定を行う際の「Redirect」コマンドと「Rewrite」コマンドの違いについても説明します。
リダイレクトとリライトの処理の違い
URLのリダイレクトとリライトの大きな違いは、URLの転送を行う際にURL(ブラウザのアドレスバーに表示されるURL)を書き換えるかどうかということです。
以下の具体例で解説します。
アクセスするURL(ブラウザのアドレスバーに入力するURL)を「www.入力URL.com」、実際の転送先のURLを「www.転送先URL.com」とします。
『リダイレクト』の処理の流れ
はじめに『リダイレクト』の処理の流れを見てみましょう。
- STEP 1
ユーザーがブラウザに「www.入力URL.com」のURLを入力してアクセスします。
- STEP 2
アクセスを受けたWebサーバーはリダイレクトの設定に従い、「www.転送先URL.com」にアクセスし直しなさいという応答を返します。
- STEP 3
ブラウザはその応答に従い、今度は「www.転送先URL.com」にアクセスします。
- STEP 4
アクセスを受けたWebサーバーは「www.転送先URL.com」のWebページを応答します。
- STEP 5
ブラウザは「www.転送先URL.com」のWebページを表示し、ブラウザのアドレスバーには「www.転送先URL.com」のURLが表示されます。
この一連の処理の流れはブラウザとWebサーバー間で自動的に行われるため、ユーザーから見ると「www.入力URL.com」にアクセスしたら「www.転送先URL.com」のWebページが表示されて、ブラウザのアドレスバーには「www.転送先URL.com」のURLが表示されている状態になります。
『リライト』の処理の流れ
次に『リライト』の処理の流れを見てみましょう。
- STEP 1
ユーザーがブラウザに「www.入力URL.com」のURLを入力してアクセスします。
- STEP 2
アクセスを受けたWebサーバーはリライトの設定に従い、「www.転送先URL.com」のWebページを応答します。
- STEP 3
ブラウザは「www.転送先URL.com」のWebページを表示し、ブラウザのアドレスバーには「www.入力URL.com」のURLが表示されます。
つまり、ユーザーから見ると「www.入力URL.com」にアクセスしたら「www.転送先URL.com」のWebページが表示されるが、ブラウザのアドレスバーには「www.入力URL.com」のURLが表示されている状態になります。
リダイレクトとリライトの使い分け
上で説明したように、リダイレクトとリライトではURLを書き換えるかどうかが大きな違いになります。
ですので、URLを書き換えたほうがいい場合と書き換えないほうがいい場合によって、リダイレクトとリライトの使い分けが異なってきます。
リダイレクトはURLを書き換えるので、WebサイトやWebページの移転、変更など、ユーザーのアクセスを移転先や変更先に誘導させたい場合などにリダイレクトを使用します。
一方、リライトはURLを書き換えないので、ユーザーには特定のURLにアクセスさせながら、表示させるWebページを変更させたい場合などにリライトを使用します。
リライトが使われている例としては、WordPressでのリライト処理が挙げられます。
WordPressでのリライト処理
WordPressではパーマリンク設定(URLの設定)によって決められたURLにユーザーをアクセスさせます。
しかし、一般的にWordPress内部では、全てのWordPress宛のアクセスを最初にindex.phpというファイルに転送します。
index.phpがWordPressにおける入り口の役割を担っています。
このindex.phpへの転送処理にURLの書き換えを行うリダイレクトではなく、書き換えを行わないリライトが使われています。
リクエストされたURLは書き換えられていないので、アクセスを受けたindex.phpとそれ以降の処理は、要求されたWebページが何なのかを識別することができます。
もしindex.phpへの転送処理にリダイレクトを使ってしまったら、リクエストされたURLはindex.phpに書き換えられてしまい、本来要求されたURLを知ることができなくなってしまうのです。
WordPressのリライト処理については、以下の記事に詳しく書かれています。
「Redirect」コマンドと「Rewrite」コマンドの違い
実際にリダイレクトやリライトの処理を行うには、「Redirect」コマンドや「Rewrite」コマンドを使って設定します。
Redirect permanent / http://wwww.example.com/
RewriteRule . /index.php [L]
WebサーバーソフトであるApacheでは、httpd.confや.htaccessという設定ファイルにディレクティブと呼ばれるコマンドを記述して、リダイレクトやリライトの設定を行います。
RedirectやRewriteはこのディレクティブのひとつです。
RedirectとRewriteはどちらもURLの転送を行いますが、どのように使い分ければいいのでしょうか?
Redirectはリダイレクト処理を行います。つまり、URLを書き換えてWebページを転送します。
一方、Rewriteはリダイレクト処理とリライト処理を行うことができます。つまり、転送する際にURLを書き換えることも書き換えないこともできます。
また、Rewriteでは正規表現を使うことができるので、1:1の転送だけでなく、一度に複数の転送元や転送先を設定することができます。
ですので、リライト処理を行いたい場合や、複雑なリダイレクト条件を設定したい場合はRewriteを、単純なリダイレクト処理を行いたいときはRedirectを使うようにしましょう。
ただし、Rewriteを使う場合は、mod_rewriteというApacheの機能を利用できる環境でなければなりません。
mod_rewriteとは要求されたURLをリアルタイムで書き換える機能のことです。
mod_rewriteを利用できない環境の場合はRedirectを使うしかないでしょう。
まとめ
リダイレクト
- URLを書き換える
リライト
- URLを書き換えない
URLを転送させる場合に、URLを書き換えたほうがいいのか書き換えないほうがいいのか、要件をしっかり確認して適切にリダイレクトとリライトを使い分けるようにしましょう。