リダイレクト(転送)の設定(.htaccess)
ホームページのリダイレクトはリニューアル時には必ず設定するのでよく行うのだが,色々な方法があるので備忘録として書いておく.
ウェブサーバーとして,Aapache を使っている場合についてのみ記述する.
リダイレクトの例
以下では
パターン | 転送前 | 転送後 |
---|---|---|
1 | https://www.rectus.co.jp/old.html | https://www.rectus.co.jp/new.html |
2 | https://www.rectus.co.jp/old/ | https://www.rectus.co.jp/new.html |
の2パターンについて説明する.
特にパターン 2 は気を付ける必要がある.
最も簡単なリダイレクト設定例
パターン 1 の場合,
Redirect permanent /old.html https://www.rectus.co.jp/new.html
のように簡単に書ける.もしこのページが引数を伴ってアクセスされる場合でも
https://www.rectus.co.jp/old.html?cc=xxxx
は
https://www.rectus.co.jp/new.html?cc=xxxx
のように転送される.
しかし,パターン 2 の場合,
Redirect permanent /old/ https://www.rectus.co.jp/new.html
と書くと,
https://www.rectus.co.jp/old/?cc=xxxx
は
https://www.rectus.co.jp/new.html?cc=xxxx
と転送はされるのだが,関係のないページである
https://www.rectus.co.jp/old/aaaa.html
も
https://www.rectus.co.jp/new.htmlaaaa.html
となってしまう.
/ で終わっているページの場合,そのディレクトリの下にファイルやディレクトリが置いてあるケースで意図しない転送が行われる.
その場合は rewriteモジュールを使う.
rewrite モジュールでのリダイレクトの設定例
RewriteEngine On
RewriteCond %{REQUEST_URI} /old.html
RewriteRule . /new.html [R=301,L]
%{REQUEST_URI} はホスト名を除いたファイルパスを返す.引数も含まない.
それが /old.html と一致した場合,
/new.html と置換される.
R=301 は恒久的リダイレクト(永続的リダイレクト)を指し,L はこれで置換完了を表す.
使っているサーバーが rewrite module を実装しているかしていないか分からない場合は
<IfModule mod_rewrite.c>
設定
</IfModule>
のように if 文で挟んでおけばモジュールがなかったとしてもエラーは出ない.
パターン 2 の場合,ちょっと工夫がいる.
RewriteEngine On
RewriteCond %{REQUEST_URI} /old/$
RewriteRule . /new.html [R=301,L]
ほとんど一緒だが,/old/ の後に $ をつける必要がある.
これをつけないと例えば,
https://www.rectus.co.jp/old/aaaa.html
も
https://www.rectus.co.jp/new.html
になってしまう.つまり,/old/ にマッチしてしまうと何でも new.html に飛ばされてしまう.
なので,$ をつける必要がある.$ は行末を意味するので,/old/ の後ろには何もつかないということを示すことになる.
汎用的という意味では リライトモジュールを使う方が確実だが,/ が URL の最後に来ない場合は,redirect で直接書くほうがシンプルだ.
ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.
※このページと無関係な内容のセールスはご遠慮ください.