複数のケースを想定してリダイレクトを書く場合があったので、メモです。
- 下記はよくみるリダイレクト処理です。
- PHPに例えると、
RewriteEngine
は処理の開始宣言、RewriteCond
は条件文、RewriteRule
はそこで実行する処理になります。 -
^
はURL正規化の開始フラグです。
RewriteEngine On
RewriteCond %{http_host} ^www.example.com
RewriteRule ^(.*) https://www.yahoo.co.jp/$1 [R,L]
- 上記のままだと
www
が付いた場合しか考慮できない可能性があるため、RewriteCond
を複数行にします。 - RewriteCondに
[OR]
をつけることでいずれか1つに一致した場合は、RewriteRule
にある処理を実行することになります。 - 表示には出ませんが、複数ある
RewriteCond
に何も書かない場合は[AND]
として処理され、すべてのRewriteCondが一致した場合にRewriteRule の行にある処理が実行されます
RewriteEngine On
RewriteCond %{http_host} ^www.example.com [OR]
RewriteCond %{http_host} ^example.com
RewriteRule ^(.*) https://www.yahoo.co.jp/$1 [R,L]
- さらに
R=301
とすると恒久的なリダイレクトになります。用途は、サイト移転時などに使います。 -
R=302
とすると、一時的なリダイレクトになり、 用途は同一ドメインのPCやSPサイト間でのリダイレクトやメンテナンス時などに使います。 - 301と302の大きな違いは、Webサイトのインデックス(検索結果に表示される情報)がリダイレクト前のサイトかリダイレクト先のサイトかです
- 301がリダイレクト先、302はリダイレクト元のページ情報(インデックス)を検索エンジンのクローラに渡します。
ステータスコード | 意味 | インデックス | ページランク | 用途 |
---|---|---|---|---|
301 | 恒久的 | リダイレクト元 | 引き継がれる *1 | メンテナンス、同一ドメインで各サイトに振り分けたい時など |
302 | 一時的 | リダイレクト先 | 引き継がれる *1 | サイト移転時など |
RewriteEngine On
RewriteCond %{http_host} ^www.example.com [OR]
RewriteCond %{http_host} ^example.com
RewriteRule ^(.*) https://www.yahoo.co.jp/$1 [R=301,L]
↓
RewriteRule ^(.*) https://www.yahoo.co.jp/$1 [R=302,L]