リダイレクト(転送)の設定(.htaccess)

最終更新日: 公開日: 2024年03月

ホームページのリダイレクトはリニューアル時には必ず設定するのでよく行うのだが,色々な方法があるので備忘録として書いておく.

ページリダイレクトの設定方法

ウェブサーバーとして,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 で直接書くほうがシンプルだ.

 

Contact

ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.
※このページと無関係な内容のセールスはご遠慮ください.

 
   
contact
Pagetop