書き方いろいろ「301リダイレクト」「302リダイレクト」など
ホームページ制作会社だけでなく、自分でホームページを作っている人でもリダイレクト処理を行ったことがある人は多いかと思います。
- ドメインを変更した
- コンテンツ(ディレクトリ)の階層が変わってしまった
- ページのURLが変わってしまった
- ページを削除した など
こんなときは、リダイレクト処理が必要です。
書き方がいくつかあるので見てみましょう
ホームページ制作会社だけでなく、自分でホームページを作っている人でもリダイレクト処理を行ったことがある人は多いかと思います。
こんなときは、リダイレクト処理が必要です。
書き方がいくつかあるので見てみましょう
この記事は「2020年12月16日」に書かれた記事です
主なリダイレクト処理に「301」と「302」があります。どちらもリダイレクトされますが、意味が異なります。
例)このホームページを新しく取得したドメイン「d-matsue-new.net」へ転送する(※実際にこのドメインは取得していません。)
Redirect permanent / https://d-matsue-new.net/
例)このホームページを新しく取得したドメイン「d-matsue-new.net」へ転送する(※実際にこのドメインは取得していません。)
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{http_host} ^d-matsue.net RewriteRule ^(.*) https://d-matsue-new.net /$1 [R=301,L] </IfModule>
この記事では割愛し、よく使うものだけご紹介します。
RewriteRuleを利用するためには、Webサーバー(Apache)に、モジュール(拡張機能)の1つ「mod_rewrite」が入っている必要があります。つまり、mod_rewriteが入っていないサーバーでは、RewriteRuleを使用することはできません。
例)homepage というディレクトを homepege2 というディレクトリにすべて転送させる
Redirect permanent /homepage/ https://d-matsue.net/homepage2/
例)homepage というディレクトを homepege2 というディレクトリにすべて転送させる
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^homepage(.*)$ /homepage2$1 [R=301,L] </IfModule>
たとえば、aboutディレクトリ全体をinfoディレクトリに飛ばすだけではなく、一部aboutディレクトリの中にあるcompany.phpは別のURLに遷移させたい場合、ページ単位のリダイレクト処理の後に、ディレクトリの処理を書きます。
Redirect permanent ^/about/company.php https://d-matsue.net/info/access.php Redirect permanent ^/about/ https://d-matsue.net/info/
※ディレクトリ→ページの記述してしまうとうまく動作しないので注意が必要です。
例)old.php というページを、new.php にリダイレクトする
Redirect permanent old.php https://d-matsue.net/new.php
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^old.php$ http://d-matsue.net/new.php [R=301,L] </IfModule>
「^」がついていたり、ついていなかったり、下記の2つの記述を見たことがありませんか?
Redirect permanent old.php https://d-matsue.net/new.php Redirect permanent ^old.php https://d-matsue.net/new.php
これ実はちょっとした落とし穴で、「^」が付いてないと同じ名前のページがあった場合、同一の処理がかかります。
例えば
という2つのページがあった場合に
Redirect permanent old.php https://d-matsue.net/new.php
と記述したとします。
1はリダイレクト処理をしたいが、
2はリダイレクトしたくないのにも関わらず、https://d-matsue.net/new.php にリダイレクトがかかってしまいます。
と思いますが、そういうことがあります。
もし同一のページ名がある場合は「^」をつけておきましょう。
302リダイレクトの書き方は、[R=301,L]が、 [R=302,L]となるだけなので、ほぼ301リダイレクトと同じです。
例)このホームページを新しく取得したドメイン「d-matsue-new.net」へ一時的に転送する(※実際にこのドメインは取得していません。)
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{http_host} ^d-matsue.net RewriteRule ^(.*) https://d-matsue-new.net /$1 [R=302,L] </IfModule>
例)homepage というディレクトを homepege2 というディレクトリにすべて一時的に転送させる
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^homepage(.*)$ /homepage2$1 [R=302,L] </IfModule>
例)old.php というページを、new.php に一時的に転送する
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^old.php$ http://d-matsue.net/new.php [R=302,L] </IfModule>
エンドユーザーが(利用者)がアクセスしてきたページがもしなかった場合、「NOT FOUND」画面が出てしまいどこにも行けなくなってしまうということがあります。これはせっかく訪れてくれた人にとってもがっかりする画面です。そんなときに設定しておくのが「404リダイレクト」。
設定は簡単です。下記の記述を設定し、404.htmlまたは、404.phpを用意しておきます。
ErrorDocument 404 /404.html(htmlの場合) ErrorDocument 404 /404.php (PHPの場合)
404.htmlまたは、404.phpにサイトマップや、グローバルな美などの共通部分が表示されていれば、万が一、ホームページに存在しないページにアクセスがあった場合も、ほかのページへ有することができます。
と思うかもしれませんが、
「NOT FOUND」が出てしまいます。それを避けるためにも設定しておいた方がよいでしょう。
ホームページをリニューアルする場合や、何かの理由で一時的にホームページを閉鎖する場合は、ホームページを訪れた人だけでなく、検索エンジンに対してもメンテナンス中ということをお知らせする「503」を使用します。
#htmlの場合 ErrorDocument 503 /maintenance.html <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !=/maintenance.html RewriteRule ^.*$ – [R=503,L] </IfModule> #PHPの場合 ErrorDocument 503 /maintenance.php <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !=/maintenance.php RewriteRule ^.*$ – [R=503,L] </IfModule>
ErrorDocument 503 /maintenance.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.php
RewriteCond %{REMOTE_ADDR} !=000.000.00.00 #アクセスを許可したいIPアドレス
RewriteRule ^.*$ – [R=503,L]
</IfModule>
メンテナンス中だけど、このコンテンツだけは見せておきたいとい場合など、ディレクトリを許可します。
例)campaign
ErrorDocument 503 /maintenance.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.php
RewriteCond %{REQUEST_URI} !=/campaign/ #アクセスを許可したいディレクトリ
RewriteRule ^.*$ – [R=503,L]
</IfModule>
などのときに<head>内の記述に下記を追加します。
<meta http-equiv="refresh" content="秒数;URL=URL">
例えば、3秒で https://d-matsue-new.net/ に遷移させる場合
<meta http-equiv="refresh" content="5;URL=https://d-matsue-new.net/">
注意点
meta refresh(メタリフレッシュ)による転送はページの評価を引き継ぎません。
どうしてもhtaccess でのリダイレクトがかけれないときの処理として利用するのが良いかと思います。
HOME > ホームページ制作 > 初心者のためのホームページ制作 > 書き方いろいろ「301リダイレクト」「302リダイレクト」など