リダイレクト(redirect)設定する

ブログサイト

WEBサイトを立ち上げていると

リダイレクトさせたいときがあります。

その場合は2通りありますので、今回はリダイレクト設定の紹介をします。

mataタグに”refresh”を設定してredirectする方法

metaタグ、はhtmlのhead部分に記述します。

metaタグの「http-equiv属性」に”refresh”を設定することでページの再読み込みをします。

また、「content属性」には「何秒後に目的のページに遷移させるか」と「リダイレクト先(目的)のURL」を指定します。

その2つを設定することで、このページを見てから「content属性」で設定した何秒か後に、目的のページに移動することができます。

使い方は下記のように設定します。

リダイレクト基本の書式(metaタグ)


<meta http-equiv="refresh" content="秒数;URL=URL">
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="uft-8">
<meta http-equiv="refresh" content="3;URL=move_newpage.html">
<title>ページリダイレクト用WEBページ</title>
</head>
<body>
<h1>リダイレクト</h1>
<p>本サイトは移転しました。3秒後にジャンプします。<br>
ジャンプしない場合は、以下のURLをクリックしてください。</p>
<p><a href="move_newpage.html">移転先のページ</a></p>
</body>
</html>

「.htaccess」ファイルを設定してredirectする方法

「.htaccessファイル」をサーバーのフォルダに置けば、そのフォルダ内にアクセスしたとき

「.htaccessファイル」を読み込み、HTTPリダイレクトすることができます。

  • 「.htaccess」ファイルが設定できる環境
  • ●Webサーバー(HTTPサーバー)は「Apache」を利用していること
  • ●Webサーバー上で「.htaccessファイル」を利用できること
  • ●Apache の「mod_rewriteモジュール」使える(推奨)

記述方法

RewriteEngine On

RewriteBase /

 # =====================

# リダイレクト始まり

 RewriteRule 正規表現パターン 置換パターン [L,R=301]

 # リダイレクト終わり

# =============

RewriteEngine On
Rewriteの機能を有効にします。

RewriteBase
ベースURLの設定です。.htaccessをルートディレクトリに置いているのであれば「/(スラッシュ)」のみになります。
もし設置場所とリダイレクトを有効にしたい場所が違うのであれば、そのディレクトリ名を書きます。
(例)「https://sample.com/aaa」をベースにしたい時 -> RewriteBase /aaa

RewriteRule
リダイレクトは「RewriteRule」の部分の文章を書き換えて設定していきます。
ちなみに文章末の[L,R=301]は、

「表記は終わり(Last)だからこれを恒久的に転送してね(301Redirect)」という意味です。

「.htaccess」ファイルの作成方法

ファイル名は決められています。ファイル名は「.htaccess」ファイルで保存してください。

Case1. 「old.html」でアクセスすると

    「new.html」に変更(リダイレクト)させます

RewriteEngine on
RewriteRule ^old.html$ /new.html [R=301,L]

Case2. 「https://old-site.com」にアクセスすると

    「https://www.new-site.com」にリダイレクトさせます

RewriteEngine on
RewriteCond %{HTTP_HOST} ^old-site\.com$
RewriteRule ^(.*)$ https://www.new-site.com/$1 [R=301,L]

Case3. URLを「http」から「https」にリダイレクトさせます。

RewriteEngine on
RewriteCond %{ HTTPS} off
RewriteRule ^(.*)$ https://%{ HTTP_HOST}%{REQUEST_URI} [R=301,L]

Case4.「http://old-site.com/query/?s=keyword」にアクセスすると

   「http://new-site.com/?s=keywordにリダイレクトさせます

RewriteEngine on<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule .* http://new-site.com/ [R=301,L]
</IfModule>

Case5.「http://a-site.info/query/?s=keyword」にアクセスすると

   「http://b-site.inf/query/keyword/ にリダイレクトさせます

RewriteEngine on
RewriteCond %{ HTTPS} off
RewriteRule ^(.*)$ https://%{ HTTP_HOST}%{REQUEST_URI} [R=301,L]

Case6.「http://old-site.com/query/?s=A1」にアクセスすると

   「http://new-site.com/?q=B1&s=A1」にリダイレクトさせます

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule .* http://new-site.com/?q=B1 [QSA,R=301,L]
</IfModule>

解説

※リダイレクト先は、自動で「?s=A1」が付加されます。

Case7.「http://old-site.com/query/?s=keyword」にアクセスすると

   「http://new-site.com/keyword/」にリダイレクトさせます

RewriteEngine on
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^s=(.*word)$
RewriteRule .* http://new-site.com/%1/? [R=302,L]
</IfModule>

解説:

QUERY_STRINGから^s=(.*word)$に一致する部分を取得します。

()内の文字列が取得できます。

()内の文字列は、RewriteRule側では「%1」として利用できます。

RewriteRuleで「%1」を利用し、リダイレクト先のURLに埋め込んでいます。

RewriteRuleの最後に「?」を付加しておくことで、 QUERY_STRING文字列を置換後URLに付加しないようにしています。 ないと、リダイレクト先のURLに自動でついてしまいます。

RewriteRule .* http://new-site.com/%1/? [R=302,L]

Case8

http://old-site.com/test.html?Atag=1&Ctag=2&Btag=3 .. 引数1つ目にAtag
http://old-site.com/test.html?Ctag=2&Atag=1&Btag=3 .. 引数2つ目にAtag
http://old-site.com/test.html?Ctag=2&Btag=3&Atag=1 .. 引数3つ目にAtag

のどれにアクセスしても

「http://new-site.com/test.html?Atag=1」にリダイレクトします。

RewriteEngine on
RewriteCond %{QUERY_STRING} (^|&)Atag=([^&]+)($|&)

(^|&) でクエリ文字列の「先頭」もしくは「&の後」にAtagがあるかチェックします。

同様に ($|&) でクエリ文字列の「最後」もしくは「&の前」にAtag=([^&]+)があるかチェックします。

キーが複数指定された場合でも正確に切り出すことができます

Case9

「http://old-site.com/?keyword=A1]を「http://new-site.com/keyword/hoge?keyword=A1にリダイレクトさせます

RewriteCond %{QUERY_STRING} ^keyword=(.*)
RewriteRule ^$ /keyword/%1 [R]

R フラグでリダイレクトさせる

Case10

「https://new-site.com/aaa/bbb.html?id=123」にアクセスすると

「https://new-site.com/ccc/ddd.html」へにリダイレクトします。


RewriteCond %{QUERY_STRING} (^|&)id=123(&|$)

RewriteRule ^aaa/bbb.html?$ /ccc/ddd.html? [L,R=301]

Case11

「https://new-site.com/basic.html?Atag=888&id=123&Btag=956」にアクセスすると

「https://new-site.com/basic.html?id=123」へにリダイレクトします。


RewriteCond %{QUERY_STRING} (^|&)id=([^&]+)(&|$)

RewriteRule ^basic.html?$ basic.html?id=(%2)? [L,R=301]

「([^&]+)」は、「&」以外の1文字以上の文字列。

RewriteCondを複数指定する場合

「https://sample.com/info/basic.html?id=123」を

「https://sample.com/sample/info/123.html」へにリダイレクトします。


RewriteCond %{HTTP_HOST} ^.*sample.com$
RewriteCond %{REQUEST_URI} ^/info/$
RewriteCond %{QUERY_STRING} (^|&)id=([^&]+)($|&)
RewriteRule ^(.*)$ /sample/info/%2.html [L]

RewriteCondの各行はANDの関係になります。

1行目の「.*」は、「http://sample.com」または「http://***.sample.com」の文字列でも対応できます。

2行目のURLのドメイン名より後ろの部分を表す変数が/info/であること

3行目の「(^|&)」は、最初または「&」のどちらかという意味になり、

    今回の場合、idが最初にあるか&の次にあるかということを意味します。

3行目の「([^&]+)」は、「&」以外の1文字以上の文字列。

3行目の「($|&)」は、クエリストリングの最後または「&」のどちらか。

なお、RewriteCondで()で囲った文字列は4行目のRewriteRuleで参照可能です。

3行目では()が3ヵ所使われていて、目的のidの値「123」は2番目。

よって4行目の「%2」は3行目で()で囲った「123」に置き換えられます。

また、RewriteRuleのリダイレクト元URLでもRewriteCondと同様に()によるグルーピングが可能です。

URL「http://sample.com/info/?id=123」の「info」という文字列を「goods」に変更する場合は

以下のように記述します。

RewriteRule ^(.*)/.*$ /goods/$1/%2.html [L]

ルール

RewriteCond部分の条件については、条件にマッチしないと

RewriteRuleが実行されず転送されないので注意が必要です。

※参照変数は、 RewriteCondは「%」。RewriteRuleは「$」であることに注意。

RewriteCondで使われる正規表現について

正規表現意味リダイレクトでの例説明
^最初を表します^aaa/URLがaaa/で始まっている
$最後を表しますaaa.html$URLがaaa.htmlで終わっているもの
*直前の文字が0回以上繰り返す時b*b.htmlbtestb.htmlやbwebb.htmlなどが一致します
.任意の1文字を表します.ABTABやYABなどが一致します
( )文字列を1つのグループにまとめるabc=(.*)abc=の後に表示される文字列を()にセットする
|もしくは(^|&)id=123 
id=123(&|$)
idの直前は先頭もしくは& 
id=123の直後はクエリの最後もしくは&
?直前の文字が0個か1個の場合bbb.html?bbb.htmlかbbb.htmllの時
つまりパスの部分が bbb.html の時のみ

.(ドット)などの上記の正規表現は、正規表現として扱われるので「\」でエスケープ処理する必要があります。

例:RewriteCond %{HTTP_HOST} ^.*127\.0\.0\.1$

トラブル対応

.htaccessを修正し、サーバーにアップして確認するのが2回目以降だったら、

キャッシュに前の情報が残っていて最新の.htaccessの情報が反映しないことも多いのです。

その場合は、キャッシュをクリアして再確認しましょう。

「.htaccess」ファイルの設置場所

Webサーバー上の「ルートディレクトリ」やそれ以外の「ディレクトリ」にリダイレクトさせたい場所に配置します。基本的に、配置した「ディレクトリ」配下にアクセスした場合、リダイレクトが有効に機能します。

コメント

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