【ケース別】.htaccessのリダイレクト設定方法とよくあるトラブル対処法
制作/開発 2024.01.26
サイトのお引越しや、ドメインの載せ替え、404エラーページの設定など、Webサイトを運用していく上で、リダイレクト(転送)が必要になるフェーズは多いと思います。
リダイレクトをする方法はいくつかありますが、リダイレクト前のページの検索評価を受け継ぐことができるという点で「SEOの評価をリダイレクトによって落としたく無い」と考えている方におすすめなのが、「.htaccess」を使ったリダイレクト設定です。
この記事では、「.htaccess」を使ったリダイレクト設定の具体的な方法について、ケース別に詳しく解説していきます。各ケース別に「.htaccess」ファイルの作成方法や記述内容、どこにアップロードをすればいいかも紹介しますので、ご自身のサイト運用にお役立てください。
目次
「.htaccess」とは?何ができる?
「.htaccess」(ドット・エイチ・ティ・アクセス)は、Webサーバーの設定を簡易的に行うことができるファイルです。
このファイルによって、Webサイトにおける次のような制御が簡単にできるようになります。
- リダイレクト
- URLの正規化
- エラーページの設定
- BASIC認証
- IPアドレス制限
- ファイル一覧表示の禁止
- キャッシュの設定
- ディレクトリリスティングのオン・オフ
これらの制御は、Webサイトを構成するHTMLやCSS側では設定できないので、通常はWebサーバー側で設定する必要があります。
しかし、FTPなどで外部からでも簡単に設定ができるHTMLやCSSと違い、Webサーバーの設定は管理者以外には難易度の高い作業です。
そんなWebサーバー側の設定を、FTPなどで外部からでも簡単に制御できる便利なファイルが「.htaccess」です。
Webサイトの制作・運用、SEO対策、UX(ユーザーエクスペリエンス)向上などには必要不可欠なファイルと言えます。
「.htaccess」の作り方と基本ルール
「.htaccess」の作り方は簡単です。
Windowsであれば『メモ帳』、Macであれば『テキストエディット』など、テキストエディタを使って次の作成します。
- テキストエディタに内容を記述し保存。ファイル名は「htaccess.txt」とする
- サーバー上の制御したいページやディレクトリと同じ階層に「htaccess.txt」をアップロード
- ファイル名を「htaccess.txt」から「.htaccess」に変更(先頭が「.」で始まるファイルが作成できないため)
「htaccess.txt」の記述、作成を行う際には、以下の基本ルールを守りましょう。
- テキストエディタで作る(メモ帳やテキストエディット以外のテキストエディタを使用してもOK)
- 文字コードはUTF-8(BOM無し)に設定する
- 日本語は文字化けする可能性があるので、使わないよう注意する
- 最後の行には空行を1行以上入れる
- #から始まる行はコメントアウト(無効化)される
- 上に記述したものから優先に処理を実行していく
「.htaccess」の詳しい記述内容は、ケース別に後述するので、そちらをご覧ください。
「.htaccess」の有効範囲と設置場所
「.htaccess」の有効範囲は、アップロードしたディレクトリ(階層)直下にある全ファイルです。
例えば、サイト全体をリダイレクトさせたい場合には、サイト全体のHTMLファイルである「index.html」と同じディレクトリに「.htaccess」をアップロードします。
また、特定の1ページだけを別のページにリダイレクトしたい場合には、次図のように、そのページのHTMLファイルが入っている階層に「.htaccess」をアップロードします。
このように、アップロードした場所によって、Webサイト全体なのか、特定のディレクトリ下なのか、制御できる箇所が違うので設置場所には注意しましょう。
ケース別:「.htaccess」のリダイレクト設定方法
「.htaccess」を使えばWebサイト上の様々な制御ができますが、最もよく利用される用途がリダイレクトです。
リダイレクトについては、「リダイレクトとは?意味や目的、具体的な設定方法を解説」で詳しく解説していますので、参考にしてみてください。
「.htaccess」でリダイレクト設定をする上で重要なのは、「何をどのような範囲でリダイレクトしたいのか?」です。それによってファイルの記述内容やアップロード箇所が変わってきます。
ここからは、ケース別に、実際の記述内容やアップロード箇所などを見ていきましょう。
ページ単位でリダイレクトする場合
ページ単位でのリダイレクトは、主に次のようなケースに必要となります。
- ページAとページBを統合したい
- ページファイルを「.html」から「.php」に変更したい
- 期間限定公開のページを終了させたい
- 公開しているページのスラッグを変更したい
例えば、example.com/aaaという特定のページをexample.com/bbbにリダイレクトする場合には、次のような記述内容で「.htaccess」を作成しましょう。
RewriteEngine On RewriteRule ^aaa$ https://www.example.com/bbb [R=301,L] |
アップロードする場所は、次図のようにリダイレクトしたいページと同じ階層です。
ディレクトリ単位でリダイレクトする場合
ページ単位ではなく、「カテゴリー」など、配下に複数のページを含むディレクトリ単位でリダイレクトすることも可能です。
主に次のようなケースで必要になります。
- ディレクトリをドメインに格上げしたい
- ディレクトリをさらに下のディレクトリに格下げしたい
- 公開しているカテゴリー名を変えたい
- ディレクトリ構造を変えたい
例えば、example.com/aaa/cccというページのディレクトリ「/aaa/」を「/bbb」に変更し、example.com/bbb/cccとしたい場合は、次のような記述内容で「.htaccess」を作成しましょう。
RewriteEngine On RewriteRule ^aaa(.*)$ /bbb$1 [L,R=301] |
アップロードする場所は、次図のようにリダイレクトしたいディレクトリのフォルダ内です。
ディレクトリ単位でのリダイレクト設定で置き換わるのは特定のディレクトリ部分だけです。
さらに下層ページのディレクトリやスラッグも変わる場合には、別途設定が必要になるので注意しましょう。
ドメイン単位でリダイレクトする場合
主に次のようなケースには、ドメイン全体でのリダイレクトが必要になります。
- サイトのお引っ越し
- ドメインの載せ替え
- 複数サイトの統合、分割
例えば、example.comというドメインをexample2.comにリダイレクトする場合、次のような記述内容で「.htaccess」を作成しましょう。
RewriteEngine On RewriteCond %{HTTP_HOST} ^example.com RewriteRule ^(.*)$ https://example2.com/$1 [R=301,L] |
アップロードする場所は、次図のようにドメイン直下(「public_html」フォルダ内)です。
ディレクトリ単位でのリダイレクト同様に、ドメイン単位のリダイレクトで置き換わるのはドメイン部分のみです。
下層のディレクトリやページのスラッグが違う場合には、別途設定が必要になるので、十分注意しましょう。
サブドメインをリダイレクトする場合
サブドメイン(⚫️⚫️.ドメイン名.com)を、ドメイン配下の特定のディレクトリに移し替える際などに使用します。
逆にドメインからサブドメインに移し替えることも可能です。
例えば、サブドメインのsub.example.comをexample.com/aaaというサブディレクトリにリダイレクトする場合には、次のような記述内容で「.htaccess」を作成しましょう。
RewriteEngine On RewriteCond %{HTTP_HOST} ^sub\.example\.com$ RewriteRule (.*) https://example.com/sub/$1 [R=301,L] |
アップロードする場所は、次図のようにサブドメイン直下(「サブドメイン」のフォルダ)です。
404エラーページをリダイレクトする場合
ユーザーが存在しないURLにアクセスした際に、真っ白い画面に「Not Found」と書かれたページが表示されたり、レンタルサーバー会社の「404エラーページ」が表示されたりすることがあります。
せっかくサイトにアクセスしてくれたユーザーの離脱につながってしまうのを防ぐために、自社で用意した「404エラーページ」にリダイレクト設定をしておくのが一般的です。
その制御も「.htaccess」で可能です。
例えば、example.comというサイトの存在しないURLにアクセスしたユーザーを404エラーページ(example.com/404)にリダイレクトさせる場合には、次のような記述内容で「.htaccess」を作成しましょう。
ErrorDocument 404 /404 |
アップロードする場所は、次図のようにドメイン直下(「public_html」のフォルダ内)です。
URLを統一する場合(URLの正規化)
URLを統一する場合にもリダイレクトが必要です。例えば、次のように同じページが複数のURLでWeb上に存在していることがあります。
- 「www」の有無:「https://example.com」と「https://www.example.com」
- 「s」の有無:「http://example.com」と「https://example.com」
- 「index.html」の有無:「https://example.com」と「https://example.com/index.html」
- 「/」の有無:「https://example.com/ppp/」と「https://example.com/ppp」
このような状態は、アクセスが分散したり、重複ページとしてGoogleに評価されてしまったり、サイト運用やSEOの観点からもあまり良い状態とは言えません。
複数のURLが存在する同一ページを統一する際にも「.htaccess」は使われます。
例えば、https://example.comとhttps://www.example.comの両方がWeb上にあり、SEOの観点からhttps://example.comに統一したい場合には、次のような記述内容で「.htaccess」を作成します。
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] |
また、https://example.com/index.htmlというドメイン表示をhttps://example.comに統一する場合には、次のような記述内容で「.htaccess」を作成しましょう。
RewriteEngine On RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L] |
もし、http://www.example.comをhttp://example.comに統一した上で、http://example.comをhttps://example.comに統一しSSL化し、https://example.com/index.htmlをhttps://example.comに統一したい場合には、次のような記述内容になります。
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L] |
アップロードする場所は次図のように、ドメイン全体の場合はドメイン直下(「public_html」のフォルダ内)、特定のディレクトリの場合はそのフォルダの中です。
特定のディレクトリをリダイレクトから除外する場合
「ドメイン全体にリダイレクト設定をしているが、特定のディレクトリだけはリダイレクトさせたくない」という少し特殊な制御を行うことも可能です。
例えば、https://example.comからhttps://example2.comにサイト全体でリダイレクト設定をかけた上で、特定の「/aaa/」というディレクトリだけはリダイレクトしたくない場合は、次のような記述内容で「.htaccess」を作成しましょう。
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !^/aaa/ RewriteRule ^$ https://example2.com [R=301,L] |
アップロードする場所は、次図のようにリダイレクトから除外したいディレクトリフォルダの中です。
デバイスごとにリダイレクトさせる場合
次のように、PC用とスマホ用でURLを分けている場合、どのデバイスからアクセスしたかによってURLを振り分ける制御を行うことも可能です。
- PC用:「https://example.com/ppp/」
- スマホ用:「https://example.com/sp/ppp/」
例えば、PCからアクセスした場合はhttps://example.comに、スマホからアクセスした場合はhttps://example.com/spにアクセスさせたい場合には、次のような記述内容で「.htaccess」を作成しましょう。
RewriteEngine on RewriteBase /
RewriteCond %{REQUEST_URI} !/sp/ RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.*Mobile|Windows.\ Phone) RewriteRule ^(.*)$ sp/$1 [R]
RewriteCond %{REQUEST_URI} /sp/ RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|Android.*Mobile|Windows.\ Phone) RewriteRule ^sp/(.*)$ $1 [R] |
アップロードする場所は、次図のようにドメイン直下(「public_html」のフォルダ内)です。
「.htaccess」のリダイレクトでよくあるトラブル
「.htaccess」は、簡単な記述で、簡単にリダイレクトができる便利なファイルです。
しかし、記述内容を少しでも間違えると、サイト全体が真っ白になってしまったり、エラーが出たり、Webサイト表示に大きな影響を及ぼしてしまう怖いファイルでもあります。
また、アップロードする場所によって制御できる有効範囲が変わるので、設置場所にも要注意です。
「.htaccess」でのリダイレクト設定時によくあるトラブルは次の3つです。あらかじめ、対処法をおさえておきましょう。
リダイレクトされない
リダイレクトされないのは、「.htaccess」のアップロード場所がおかしい場合によく起こります。
アップロード場所は、リダイレクトしたいファイルと同じ階層です。別の場所にアップロードされていないか、今一度チェックしてみてください。
無限ループになってしまった
「ページA→ページB→ページA→ページB」のように、複数の「.htaccess」が呼応して、ページが無限にリダイレクトされ続ける状態を「リダイレクトループ」と呼びます。
リダイレクトループかどうかは、アクセスした際に画面に「リダイレクトが多すぎます」などエラーメッセージがでるかどうかで判断が可能です。
主に記述内容のミスでリダイレクトループは発生してしまうので、今一度「.htaccess」の記述内容をチェックし、修正してみましょう。
ページが表示されなくなってしまった
「.htaccess」をアップロードしたら、画面が真っ白になって何も表示されなくなってしまった、というトラブルは、記述ミスがある場合によく起こります。
まずは、サイトにアップロードした「.htaccess」を削除して、サイト表示を復活させます。
その後、半角スペースなどが含まれていないかなど、今一度「.htaccess」の記述内容をチェックしてみてください。
「.htaccess」のリダイレクト設定は慎重に!
「.htaccess」は簡単な記述で様々なWebサイト制御が行える便利なファイルですが、ちょっとした記述ミスなどで、Webサイト全体に影響を及ぼす怖いファイルでもあります。
そのため、記述内容と設置場所を間違えないように、事前に設計図を可視化するなどして、記述やアップロードを慎重に行いましょう。
パンタグラフでは、Webサイトのお引越しやドメインの載せ替え、Webサイトの整理など、Webサイト運用において、SEOなどの影響を考慮したリダイレクト設計、及び適切な設定を行っております。
Webサイトのお引越しやドメインの載せ替えなどが不安、Webサイトをもっと整理したい、という方はぜひお気軽にお問い合わせください。
関連する記事