.htaccessを使ったリダイレクト処理の記述方法を複数パターンで紹介
「.htaccessを使ったリダイレクト処理の記述方法は?」
「リダイレクトする際は、絶対に.htaccessファイルを編集しないとダメ?」
.htaccessでのリダイレクトは、Googleも推奨するリダイレクトの方法です。
正しいリダイレクト処理によりSEOやユーザビリティの向上を実現できますが、問題は初心者には記述が難しいことでしょう。
この記事では、.htaccessファイルを編集するリダイレクトの方法、さまざまなパターン別の記述例を紹介します。
最後まで読めば.htaccessファイルを編集するリダイレクト方式への苦手意識が消え、自信を持って操作できるようになるはずです。
1..htaccessファイルとは
.htaccessファイルは、Webサイトの設定を制御するための重要なファイルです。
リダイレクト処理をする際にも使用するケースが多いので、まずは概要を理解しておきましょう。
- .htaccessの基本的な役割と機能
- ApacheとWebサーバーとの関係
(1).htaccessの基本的な役割と機能
.htaccessファイルはApacheサーバーの設定を変更できる特別なファイルです。
このファイルを使用することで、URLの書き換えやリダイレクト、アクセス制限などの設定が可能となります。
.htaccessファイルはサーバー全体の設定を変更せずに、特定のディレクトリやファイル制御できるのが特徴です。
(2)ApachとWebサーバーとの関係
ApacheはWebサーバーソフトウェアの一種で、世界中で最も広く使用されているプラットフォームです。
.htaccessファイルは、このApacheサーバーの動作を細かく制御するための設定ファイルとして機能します。
.htaccessの使用により、サーバー管理者でなくても、レンタルサーバーなどで独自の設定を行えるメリットがあります。
(3).htaccessファイルの配置場所と適用範囲
.htaccessファイルは通常、Webサイトのルートディレクトリに配置されています。
そして、.htaccessファイルを配置したディレクトリ以下のすべてのファイルやフォルダに設定が適用されます。
サブディレクトリに別の.htaccessファイルを置くことで、ディレクトリごと設定を切り替えることも可能です。
2..htaccessを使用したリダイレクトの種類
.htaccessファイルを使用したリダイレクトの種類について解説します。
- 301リダイレクト
- 302リダイレクト
- その他のリダイレクト(303、307など)
(1)301リダイレクト
301リダイレクトは、ページが恒久的に移動したことを示すリダイレクト設定です。
検索エンジンに対して「このページは完全に、新しいURLへ移転した」とシグナルを送ります。
検索エンジンは301リダイレクトのシグナルを読み取り、サイト移転をインデックスに登録するため、SEO的にも大きな意味を持つリダイレクト処理です。
なお、301リダイレクトを実施した場合はSEO的な評価も新しいURLに引き継がれます。
301リダイレクトについて、より詳しく知りたい方は以下の記事を参考にしてください。
(2)302リダイレクト
302リダイレクトは、一時的なページ移動を示す設定です。
キャンペーンページや、メンテナンス、A/Bテスト時に使用されるリダイレクト処理です。
302はあくまで一時的なリダイレクト処理であり、SEO評価はすぐには引き継がれません。
そのため、301と302は用途に応じて正しいものを使い分けた方が良いでしょう。
以下の記事でも、302リダイレクトについて取り扱っています。
ぜひ参考にしてください。
(3)その他のリダイレクト
リダイレクトにはその他「307、308」などの種類があります。
307も一時的なリダイレクトを表すステータスコードですが、302とはHTTPメソッドを維持するかどうかが異なります。
HTTPメソッドとは、ブラウザとサーバーが情報をやり取りする際の通信方式のことです。
302でリダイレクト処理をした場合は、このHTTPメソッドが変更されますが、307だとHTTPメソッドを変更することなくリダイレクトができます。
そのため、ショップカートや会員情報の入力フォームなど、情報入力が必要なページによく使用されるリダイレクトです。
リダイレクトの概要についてさらに詳しく知りたい方は、こちらの記事をご覧ください。
3..htaccessでリダイレクトする手順
.htaccessでのリダイレクト手順を解説します。
設定ミスによるサイトダウンを防ぐため、以下の手順に従って作業を進めましょう。
- .htaccessファイルの有無をチェックする
- リダイレクトを記述する
- ファイルをアップロードする
(1).htaccessファイルの有無をチェックする
まずはサーバー上で既存の.htaccessファイルがないか、FTPソフトなどで確認します。
なお、隠しファイルの表示設定を有効にしないと、.htaccessファイルが見えない場合があります。
その場合は隠しファイルの表示設定を切り替えてから、ファイルの有無を確認しましょう。
もしも既存のファイルがある場合は、必ずバックアップを取得してから編集作業をしてください。
(2)リダイレクトを記述する
次にテキストエディタで.htaccessファイルを開き、必要な設定を記述します。
記述が間違っていると正しいリダイレクト処理ができないので、誤字などがないかチェックしましょう。
詳細なリダイレクトルールの記述は、次の項目で解説しています。
(3)ファイルをアップロードする
.htaccessファイルの編集と保存が終わったら、編集後のファイルをサーバーへアップロードします。
リダイレクト処理が正しく行われているか確認し、問題がなければリダイレクト処理は終了です。
4..htaccessでのリダイレクト記述方法
.htaccessリダイレクトの設定には、正しい記述方法の理解が必要です。
- Rewrite Engineの有効化
- 基本的なリダイレクト構文
(1)Rewriten Engineの有効化
Rewriten Engineとは、Apacheで利用される機能の1つでURLの書き換えやリダイレクト処理をするためのコードです。
リダイレクトを有効にする場合は「Rewrite Engine」を「On(有効)」にする必要があります。
.htaccessファイルに以下のように記述することで、「Rewrite Engine」を「On(有効)」しましょう。
RewriteEngine on
(2)基本的なリダイレクト構文
先程説明したRewrite Engineを有効化にする記述に続き、リダイレクトさせるための構文を紹介します。
box class=”color-box” title=”記述方式”]
RewriteEngine On
RewriteCond %{http_host} ^www.old.com/
RewriteRule ^(.*) https://www.new.com/$1 [R=301,L]
[/box]
以上は古いURLから新しいURLへ恒久的なリダイレクト(301リダイレクト)をする際の書き方です。
302リダイレクトさせる際は、以下のような記述となります。
RewriteEngine On
RewriteCond %{http_host} ^www.old.com
RewriteRule ^(.*)$ http://www.new.com/$1 [R=302,L]
5..htaccessでの一般的なリダイレクトシナリオと書き方
.htaccessでの一般的なリダイレクトシナリオと書き方を紹介します。
- 特定のページをリダイレクトする
- ディレクトリ単位でリダイレクトする
- ドメイン単位でリダイレクトする
- サブドメインをリダイレクトする
- URLの正規化をする
- SSL化の転送をする
(1)特定のページをリダイレクトする
まず特定のページをリダイレクトさせる際の記述方式は以下のようなものです。
RewriteEngine On
RewriteCond %{http_host} ^www.old.com/
RewriteRule ^(.*) https://www.new.com/$1 [R=301,L]
旧URLから新URLへの転送を、明示的に指定しましょう。
(2)ディレクトリ単位でリダイレクトする
リダイレクトではディレクトリ単位での転送も可能です。
その場合は以下のように記述します。
RewriteEngine On RewriteRule ^old-directory/(.*)$ new-directory/$1 [R=301,L]
(3)ドメイン単位でリダイレクトする
ドメイン単位で一括リダイレクトする場合は、以下のように記述しましょう。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]
サイト移転時に、すべてのURLを新しいドメインに転送する設定です。
パスの構造を維持したまま、ドメインだけを変更することができます。
(4)サブドメインをリダイレクトする
次にサブドメインをリダイレクトする際の記述を紹介します。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
サブドメインを使用していたコンテンツをメインドメインに統合する際に使用します。
(5)URLの正規化をする
URLの正規化により、検索エンジンに複数のURLを同一のものとして認識させる効果があります。
index.htmlの省略や、WWWの有無を統一するURL正規化のためのリダイレクトは、次のように記述しましょう。
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html
RewriteRule ^index\.html$ / [R=301,L]
(6)SSL化の転送をする
HTTPSへの完全移行の際には、SSL化が必要です。
この場合は以下のようなリダイレクトをかけて、サイトの安全性とSEO対策をしましょう。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
6..htaccessでリダイレクト処理する場合の注意点
.htaccessでリダイレクト処理する場合の注意点を紹介します。
- バックアップを取る
- リダイレクト先をよく確認する
(1)バックアップをとる
設定変更前に.htaccessファイルのバックアップを必ず取っておきましょう。
問題が発生した場合に、すぐに元の状態に戻す準備をするためです。
また、サイト全体のバックアップも取っておくとエラー発生時に安心です。
サーバー側のファイルを操作するには危険が伴うので、慎重な準備を忘れないでください。
(2)リダイレクト先をよく確認する
.htaccessファイルの転送先URLに誤りがないか、よく確認しましょう。
万が一URLを記述ミスした場合は転送されないばかりか、エラーが表示され、ユーザーが離脱するリスクがあるからです。
また、ユーザーと同様に検索エンジンもクロールができなくなり、インデックスのスピードにも影響します。
7..htaccessのリダイレクトで起こりやすいトラブルと解決策
.htaccessのリダイレクトで起こりやすいトラブルと解決策も覚えておきましょう。
- リダイレクトが効かない
- リダイレクトループが発生する
- ページ自体が表示されない
(1)リダイレクトが効かない
.htaccessのリダイレクトが効かない場合は、mod_rewriteモジュールが有効化されているか確認しましょう。
Apache HTTPサーバーの機能を拡張するモジュールの1つで、URLの書き換え(リライト)を行う役割を担います。
ファイル冒頭に「RewriteEngine On」が記述されているか今一度確認しましょう。
(2)リダイレクトループが発生する
リダイレクトループが発生する原因は主に、URLの誤りです。
全てのページが1つのURLへリダイレクトするよう設定していたり、wwwありとなしのURLで相互にリダイレクトをかけているなどのミスがないかチェックしましょう。
(3)ページ自体が表示されない
リダイレクトしたものの、ページが表示されないエラーが発生した場合は、記述にミスがあることが多いです。
今一度ファイルを確認し、記述に問題がないかチェックしましょう。
また、サーバーのエラーログを参照するとエラー内容が表示されるので、内容を確認して対応しましょう。
8..htaccessリダイレクトの代替手段と比較
.htaccessファイルへのアクセス権限がない場合などは、別の手段でリダイレクトが必要です。
3つの代替手段を紹介するので、権限の問題やうまくリダイレクトができない場合は試してみてください。
- PHPによるリダイレクト
- サーバー設定(httpdf.config)でのリダイレクト
- プラグインでのリダイレクト
(1)PHPによるリダイレクト
PHPとはWeb開発に特化したプログラミング言語で、WebサイトやWebプログラミングを制御する際に使用できます。
このPHPを利用すれば、.htaccessファイルなしでのリダイレクトが可能です。
特にユーザーの訪問時間や位置情報、デバイスなどユーザー固有の条件に基づいての条件分岐が必要な場合のリダイレクトなどに向いています。
PHPでのリダイレクトは以下のように記述します。
header(“Location: https://example.com/new-page”, true, 301);
exit;
PHPによるリダイレクトは、動的な転送が必要な場合に適しています。
データベースと連携した条件分岐が可能となります。
ただし、.htaccessと比べてサーバーリソースを多く消費する傾向にあります。
(2)サーバー設定(httpdf.config)でのリダイレクト
httpdf.configとは、Apacheのメイン設定ファイルで、サーバーの基本的な動作やセキュリティ設定を制御する役割をしています。
このhttpdf.configの編集により、リダイレクトの処理が可能です。
Redirect permanent /old-page.html https://www.example.com/new-page.html
サーバー設定での直接的なリダイレクトは、最も高速な処理が可能です。
ただし、サーバー管理者権限が必要となるため、レンタルサーバーでは利用できない場合があります。
(3)プラグインでのリダイレクト
WordPressでWebsサイトを制作している場合は、プラグインでリダイレクトを実行できます。
プラグインをダウンロードして有効化し、設定画面で転送元と転送先URLを指定するだけなので、非常に簡単な方法です。
たとえば世界的にシェアの高い「Redirection」では、301や302など複数のリダイレクト処理が可能です。
ただし、プラグインの品質や更新状況によってはリダイレクトエラーが発生する可能性があるため、最新のWordPressバージョンに対応したプラグインを選ぶようにしましょう。
WordPressのリダイレクト操作については、以下の記事をご覧ください。
9..htaccessでのリダイレクトについてよくある質問
.htaccessでのリダイレクト設定に関する疑問点をまとめました。
- WordPressの移転の場合は、どのようにしたら良いですか?
- 除外設定はどのようにしたら良いですか?
(1)WordPressの移転の場合は、どのようにしたら良いですか?
WordPressで制作したサイトを移転する場合は、データベース内のURL変更が必要です。
記述は以下のようになります。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]
プラグインやSQOコマンドを使用し、内部リンクも一括で変更しておきましょう。
また、画像やメディアファイルのパスも、忘れずに更新することが重要です。
(2)除外設定はどのようにしたら良いですか?
リダイレクトの除外設定をする際は、以下のような条件分岐を使用しましょう。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/excluded-directory/
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]
まとめ
.htaccessを使用したリダイレクト設定は、Webサイト運営をするうえでいつか覚えなければならない技術です。
設定作業は必ずバックアップを取り、慎重に進めることをお勧めします。
正しい設定方法を理解し、適切なリダイレクト方式を選択することで、ユーザビリティとSEO対策の両立が可能となります。
記事で紹介した記述例なども参考にして、.htaccessを使用したリダイレクトにも挑戦してみてください。