エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


サイト更新、引越時に.htaccessでリダイレクトする方法解説

      2018/03/25

.htaccessのRewrite Engineの処理でリダイレクト

 

.htaccessでサイト更新、引越し時にリダイレクトさせる方法の概要

 
サイトをリニュアルして URLが変った時、引越しをしてドメインが変った時などに、.htaccessを使ってリダイレクトさせるときの処理の書き方について解説します。
 
タイトルも上記の説明にも「リダイレクト」と書いていますが、実際の処理は URLを書き換える処理ですので「リライト」が正しいです。
そもそも .htaccessに書くの処理が「Rewrite」ですし。
 
 
リダイレクト(リライト)する処理としては「Redirect」を使って記述する方法もありますが、「Redirect」を使う方法はページの下部の「.htaccessのRedirectの処理でリダイレクト」に記載していますので、併せて参考にしてください。
 
また、「リダイレクトの処理もキャッシュする」に記載していますが、.htaccessのリダイレクトの処理もブラウザがキャッシュを保持しますので、ご注意ください。
 
 

.htaccessのRewrite Engineでのリダイレクト処理解説

 

リダイレクト処理の .htaccessの記述方法

 
ドキュメントルートに「.htaccess」ファイルを作成し、以下の内容を記述します。
 

 
 

リダイレクト処理の .htaccessの記述方法の解説

 
以下、説明をしていきます。
 

RewriteEngine on

「RewriteEngine on」でリダイレクトする処理を宣言します。
サーバによっては、「RewriteEngine」を許可していない場合もありますので、サーバの使用を確認してみてください。
 

RewriteBase /

リダイレクト処理のベースを宣言します。
「/」はドキュメントルートから始まることを明示しています。
特定のフォルダの場合はここを変更します。
 

RewriteRule

3行目~6行目までの「RewriteRule」では、リダイレクトの設定を行います。
旧サイトから新サイトに作り変える際にページの URLが変ったページの指定を行います。
 
指定の方法は下記の様になります。
  RewriteRule 旧ファイル 新URL [オプション]
 
オプションの「R=301」は、「301転送(恒久的なURLの変更)」を意味しています。一時的な URLの変更の場合は「302」を指定します。
「L」は、条件にマッチした際にはそこで処理を終了させることを意味しています。
 
RewriteRule ^old\.html$ http://example.com/new1.html [R=301,L]
3行目は、「old.html」から「new1.html」に切り替わった 1:1のページリダイレクトの設定です。
 
RewriteRule ^test1/old2\.html$ http://example.com/new2.html [R=301,L]
4行目は、3行目と違い、フォルダも指定する形で「/test1/old2.html」から「new2.html」に切り替わったリダイレクトの設定です。
 
RewriteRule ^test1/test2/ http://example.com/new3.html [R=301,L]
5行目は、「/test1/test2/」のフォルダの中どの URLであっても「new3.html」にリダイレクトする、という処理です。
 
RewriteRule ^test1/test3/(.*)$ http://example.com/$1 [R=301,L]
6行目は、「/test1/test3/」のフォルダの中の指定されたファイルをドキュメントルートの URLに差し替えてリダイレクトする、という処理です。
具体的には下記の様にリダイレクトします。
「http://old.com/test1/test3/aa.html」を「http://example.com/bb.html」に
「http://old.com/test1/test3/bb.html」を「http://example.com/bb.html」に
 
 

RewriteCond

「RewriteCond」は、リライトするための条件を指定します。
指定の方法は下記の様になります。
  RewriteCond 値 条件 [オプション]
 
複数の条件を指定する場合は、「RewriteCond」の行を追記していきます。
サンプルではオプションを記述していませんが、オプションを記述しない場合は「[AND]」が指定されています。
これを OR条件にしたい場合は「[OR]」を指定します。
また、判定パターンで大文字小文字を判別しない場合は「[NC]」を指定します。
 
 
RewriteCond %{REQUEST_URI} !(^/$)
ここでは「{REQUEST_URI}」(取得されたURL)が、「!(^/$)」(トップページではない)ときに処理を実行する、という内容です。
 
RewriteCond %{REQUEST_FILENAME} !-f
「-f」は条件がファイルの存在有無の確認で、「!-f」ですので、ファイルがない場合が Trueになります。
 
RewriteCond %{REQUEST_FILENAME} !-d
上記とほぼ同じでこちらは、「-d」は条件がフォルダの存在有無の確認で、「!-d」ですので、フォルダがない場合が Trueになります。
 

RewriteRule ^(.*)$ / [R=301,L]

先の「RewriteCond」の条件に合致する場合に処理を行う部分です。
「^(.*)$」いずれの条件の場合も「/」(サイトトップ)にリダイレクトする、という内容になります。
 
ここでは、それの前の「RewriteCond」の条件である、「トップページでなく」かつ「ファイルがない」かつ「フォルダがない」場合にこのリダイレクトが実行されます。
 
 

ErrorDocument 404 /

 
アクセスしたページがない場合に特定のページを表示させる、という処理は、「ErrorDocument」を使って記述することができます。
 
7行目~10行目の「RewriteRule ^(.*)$ / [R=301,L]」のあたりの代わりに、
  ErrorDocument 404 /
 
と記述することで、ページがない場合はトップページを表示させる、という処理を記述することは可能です。
 
ただし、この場合、リダイレクト(リライト)とは違い、「エラーページとしてどのページを表示するか」の設定のため、URLが切り替わりません。
 
例えば、「http://example.com/bb」と入力した場合、URLはそのままで、トップページと同じページが表示されるだけですので、ユーザはページがないことに気付かないかもしれません。
 
それどころか、検索エンジンは、この方法を推奨しておらず、しっかりと存在しないページであることを伝えるページを作ることを推奨していますので、この方法は SEOの視点からも避けるべき設定です。
 
 

リダイレクトの処理もキャッシュする

 
これらのリダイレクトの処理を作成する際に一番注意する必要がある点は、ブラウザがリダイレクトの設定をキャッシュしてしまう点です。
ブラウザによって処理に差異がありますが。
 
そのため、「.htaccess」を修正しながらテストをしている際に、修正したのに前の設定が残っていて、いろいろ設定を変えてトライしてみてもなかなかうまく動かず、何が間違っているのか延々と悩む結果につながる可能性があることを頭の片隅に入れておきましょう。
 
リダイレクトの動作確認を行ったら、その都度ブラウザのキャッシュをクリアする、という作業をしておく方が安全です。
 
 


 
 

.htaccessのRedirectの処理でリダイレクト

 

.htaccessでサイト更新、引越し時にリダイレクトさせる方法の概要

 
ここでは、「Redirect」を使って記述する方法を解説していますが、「RewriteEngine」を記述してリダイレクトさせる処理の場合は「.htaccessのRewrite Engineでのリダイレクト処理解説」に戻って確認してください。
 
 

.htaccessのRedirectでのリダイレクト処理解説

 

リダイレクト処理の .htaccessの記述方法

 
ドキュメントルートに「.htaccess」ファイルを作成し、以下の内容を記述します。
 

 
 

リダイレクト処理の .htaccessの記述方法の解説

 
このリダイレクトの記述の方法は、「.htaccessのRewrite Engineでのリダイレクト処理解説」に比べると分かりやすい記述になっています。
 
 

Redirect 301 /aaaa/bbbb.html http://new.com/xxxx/zzzz.html

URLが「/aaaa/bbbb.html」だったら、「http://new.com/xxxx/zzzz.html」に 301リダイレクトします、という内容です。
パッと見て分かりやすい構造です。
 

RedirectMatch 301 .* http://new.com/index.html

URLが「.*」にマッチしたら「http://new.com/index.html」に 301リダイレクトします、という内容です。
「.*」は正規表現で「全ての文字列」という意味ですので、全ての URLをリダイレクトさせる、という意味です。
 
 
また、この「Redirect」のリダイレクト処理は、上から順番に処理をしていきます。
そのため、この処理全体で、以下のような意味になります。
 指定してある URLの場合は指定の URLにリダイレクトします。
 指定されていない URLの場合はまとめて新サイトのトップページへリダイレクトします。
 
 
また、「301」は恒久的な URLの変更のための設定で「permanent」と記述することもできます。
サーバによっては「301」もしくは「permanent」のいずれかしか受け付けない場合もありますので、どちらかで動かない場合は反対の方を試してみてください。
 
また、一時的な変更の場合は「302」を指定してください。
 
 
詳しくは、下記のサイトが参考になりました。
 http://htaccess.cman.jp/explain/redirect.html
 
 

Redirectでのリダイレクトのデメリット

 
この「Redirect 301」を使ってのリダイレクト方法ですが、記述方法が分かりやすいところは大きなメリットですが、ドメインが変わる場合にしか使えない、というところが致命的な欠点です。
ドメインは変わらず、サイトの構造だけが変わった場合には使えないのです。
 
なぜなら、最後の 1行があるためにリダイレクトループしてしまうのです!
 
 
ドメインが変った場合であれば、別ドメインの環境にリダイレクトしてしまうためもう一度このリダイレクト処理が読み込まれることはありませんが、ドメインが同じ場合は、リダイレクトしてきた場合にまたこの .htaccessが読み込まれるため、トップページにリダイレクトした場合は延々とリダイレクトループしてしまう、という状況が発生してしまいます。
残念。
 
 
今回は「.htaccess」でリダイレクト処理をしていることが分かっていますので、リダイレクトループしてしまった場合の対処方法について確認する必要はありませんが、その他のリダイレクトループしてしまった場合などのために「リダイレクトループが原因で「ERR_TOO_MANY_REDIRECTS」「このページを表示できません」が出たときの対策12事例+α」に記事を書いていますので、何かでリダイレクトループしてしまった場合は参考にしてみてください。
 
 

.htaccessによるリダイレクトが利用できない場合

 
.htaccessによるリダイレクトですが、そもそも .htaccessが利用できるようになっていないと動きません。
 
.htaccessを使えるようにするための設定に関しては、下記のサイトが参考になります。
「httpd.conf」をメンテナンスできる環境の方は確認してみるといいでしょう。
 http://blog.sugulab.com/?p=816
 
 

.htaccessによるリダイレクトのまとめ

 
この記事では、Webサイトの更新、引越しなどでサイト構造が変わり、URLが変わったために旧 URLから新 URLにリダイレクトの設定をする、ということを想定してリダイレクトの処理を作成しました。
 
.htaccessに RewriteEngineの処理を記述することで、ドメインが変わる場合も変らない場合も両方対応できることを確認できました。
 
ここで例を出したものだけでは多様なリダイレクト処理を実行するには足りない箇所もありますが、.htaccessはプログラムを記述することと同じく、多様な処理を多様な記述方法で実現することができますので、ここでは条件を絞って解説をしました。
 
そのため、ここでの説明で足りない場合は、ググっていただいてマニュアル的なサイトを確認しつついろいろと試してみてください。

 - プログラミング・Web関連技術

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

.htaccessのmod_expiresでブラウザキャッシュで高速化でSEO対策!

Page Speed Insightsの指摘事項のファイルのブラウザキャッシュの設定方法。解説もしてるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!

Gitで「fatal: Authentication failed for 'https://example.com/git_repositories/example.git/'」のエラーが出た場合の対処方法の一つ
Gitで「fatal: Authentication failed for ‘https://example.com/git_repositories/example.git/’」のエラーが出た場合の対処方法の一つ

Gitのリモートリポジトリにアクセスする際、Authentication failedのエラーが。しかし、ID、PASSが間違っているのではなく、リモートリポジトリのURLが間違っている場合もあるので再度確認を。

Beautiful Soupを利用してPythonでスクレイピングを行う環境構築方法の解説

BeautifulSoupはPythonでスクレイピングを行う際に便利なツール。インストール方法も簡単。ただ、事前にpipのインストールが必要でその解説もしてます。

.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点
.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点

Gitで管理する対象、対象外のファイル、フォルダの指定は .gitignoreに記述する。その基本的な記述の方法に加え、無視対象にしたフォルダの中の特定のファイルを管理対象にする記述方法を解説。

ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?

ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。

Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説

開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。

直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明

直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。

SyntaxHighlighterを導入してソースコードを見やすくしてみました

PHP、HTMLなどのソースコードをブログで紹介するとき、SyntaxHighlighterを利用することで見やすく提供することが出来ます。

EストアのショップサーブのWordPressサービスにメリット無し

ショップサーブのオプションサービスのWordPressを使ってみましたがデータベースには直接触れず使えないサービスでした。

mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器

Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。