【.htaccessのリダイレクト】パターン別の書き方サンプル8選 | | まーくんのアフィリエイト学校

アフィリエイトを始めるために知っておきたいことなどの基礎から、運営に関する知識やテクニックなどの応用まで様々なノウハウを学ぶことができます

【.htaccessのリダイレクト】パターン別の書き方サンプル8選

公開日 最終更新日

リダイレクトは、サイトドメインの引っ越し・SSL化(https化)などによって、ページURLが変化した際に使用されるケースが多いです。

 

リダイレクトの設定はPHPHTMLなどでも可能ですが、Googleでは「.htaccess(ドット・エイチティー・アクセス)ファイル」を用いる方法が推奨されています。

 

.htaccessファイルって、なんだか難しそうくま……。
ちょっと難しいかもしれませんが、いくつかのポイントを押さえれば大丈夫です~。

 

この記事では

 

・「.htaccess」ファイルを使用するためのサーバー環境

・パターン別の書き方サンプル

・リダイレクトが効かないときの対処方法

 

これらについてご紹介します。

 

.htaccessを使用するためのサーバー環境

 

.htaccessファイルでリダイレクトを設定するには、サーバーが以下の条件をクリアしている必要があります。

 

・Webサーバーが「Apache(アパッチ)」である

・Webサーバー上で「.htaccessファイル」を利用できる

・Apache の「mod_rewriteモジュール」使える(※必須ではない)

 

「Apache」とは、世界中で多くのシェアを有するWebサーバーソフトウェアで、国内の多くのレンタルサーバーで使用されています。

 

mod-rewriteモジュールは、Apacheに組み込む部品のようなもので、URLの書き換えやリダイレクト処理を行います。

 

会社にたとえるなら、モジュールはひとつの「部署」みたいなものです~。

 

社内に「人事部」「営業部」などがあるように、

リダイレクトという仕事を担当する部署として「mod_rewrite」がサーバー内に組み込まれてる、というイメージです~。

 

▼主要レンタルサーバーのサポート状況

 

Apache

mod_rewrite

さくらインターネット

ロリポップ

WADAX

Xserver

カゴヤ・ジャパン

お名前.com

〇(一部制限あり)

GMOクラウドレンタル

サーバー iCLUSTA+

〇(一部制限あり)

KDDI CPIレンタルサーバー

クイッカ

※情報は2019年11月時点のものです。サービス内容は変更される場合があります。

 

サーバーがApacheじゃなかったら、.htaccessは絶対に使えないくまか?

Apache以外のサーバーでも、htaccess を利用できるようサポートしているケースもあるです~。詳しくは利用サーバーのマニュアルなどを確認してほしいです~。

 

.htaccessでの301リダイレクトのやり方

.htaccessファイルで301リダイレクトを行う際には、ファイル内に必要な内容を記述します。

 

.htaccessファイルの編集方法は利用環境によって異なりますが、次の3つが一般的です。

・レンタルサーバーの管理画面から編集

・Wordpressで自動生成されたファイルを編集

・ローカル環境上でテキストエディタを使用する

3つのなかで初心者にオススメなのは、レンタルサーバーでの編集です~。

逆に、ローカル環境での編集はちょっとややこしいので、他の方法が使えない場合に参考にして欲しいです~。

 

レンタルサーバーの管理画面から編集

レンタルサーバーの管理画面には、.htaccessファイルの編集機能が用意されているケースが多いです。

 

「ファイルマネージャー」という機能を利用して簡単に.htaccessファイルを作成できたり、管理パネル内から編集できたりするので、

サイト運営初心者でもスムーズに作業を進められます。

 

詳しくは、利用中のレンタルサーバーの公式サイト・ユーザーマニュアルなどをご参照ください。

 

WordPressで自動生成されたファイルを編集

WordPressをインストールした際、.htaccessファイルは自動的に生成されます。

ファイルを探してバックアップを用意した後、適宜編集しましょう。

 

ただし、環境設定によってはファイルが非表示になっていたり、生成に失敗していたりするケースがあります。

 

利用環境で.htaccessファイルが見つからない場合は、以下の3つをチェックしてください。

 

1.ローカルPCの設定

2.FTPソフトの設定

3.wordpressの権限

 

【1.ローカルPCの設定】

ローカルPCの設定によって.htaccessファイルが非表示になっている場合、WindowsとMacで対処法が異なります。

 

詳細は以下のリンクをご参照ください。

 

▼Windows

https://support.microsoft.com/ja-jp/help/14201/windows-show-hidden-files

 

▼Mac

https://qiita.com/TsukasaHasegawa/items/fa8e783a556dc1a08f51

 

【2.FTPソフトの設定】

FTPソフト側で、.htaccessファイルを非表示にしているケースもあります。

 

「隠しファイルを表示」できるよう設定を変更すれば良いのですが、細かいやり方はFTPソフトごとに異なります。

そのため、ソフトのマニュアルなどを見ながら対応する必要があります。

 

なお、主要FTPソフト2種での設定変更の方法については、以下のページをご参照ください。

 

▼WinSCP

https://qiita.com/fukaken5050/items/5a7b5be893276ba5a1b4

 

▼FileZilla

https://qiita.com/camomile_cafe/items/7bc7a0df829a27bb5869

 

【3.Wordpressの権限】

WordPressにフォルダ書き込み権限がないために、.htaccessの生成に失敗している場合があります。

 

この場合、Wordpressに適切な権限を与えることで解決できます。

 

ちなみに、この権限のことを「ファイルパーミッション」と呼ぶです~。

詳しくは、この記事の後半で解説してるですよ~。

 

ローカル環境上でテキストエディタを使用する

 

▼おおまかな流れ

1.「メモ帳(Windows)」や「テキストエディット(Mac)」など、適当なテキストエディタで.htaccessファイルを作成

2.ファイル内に301リダイレクト設定を書き込む

3.サイト内の任意のディレクトリにアップロード(※トップディレクトリに設置するのが一般的)

 

作業するときには、次の3点に注意しましょう。

 

・「.htaccess」ファイルの名前

・文字コード・改行コード

・「.htaccess」ファイルの設置場所

 

【.htaccessファイルの名前】

ローカル環境上でファイル名を決定する際には、「.」から始まる名前や「.htaccess」拡張子(※)を使用できないケースがあります。

 

その場合は、「*.txt」など適当な名前を設定したうえで編集を進めていきましょう。

ファイルのアップロード完了後に、名前を「.htaccess」に変更すれば問題ありません。

 

※拡張子とは

ファイル名の最後に付く「.txt」「.html」などの文字。

 

ただし、ファイルの拡張子が「.txt」のままだと、リダイレクト設定が効かなくなるので注意しましょう。

 

【文字コード・改行コード】

.htaccessファイル作成時には、以下の記述形式を用いる必要があります。

・文字コード:UTF-8

・改行コード:LF(ラインフィード)

 

特にMacで編集したファイルには、改行コードとして「CR(キャリッジリターン)」が含まれるケースがあるので注意が必要です。

 

【.htaccessファイルの設置場所】

.htaccessファイルは原則トップディレクトリに設置しましょう。

 

.htaccessファイルの記述内容が反映されるのは、該当ファイルが設置されたディレクトリと、それより下のディレクトリのみです

 

つまり、.htaccessファイルより上のディレクトリにあるファイルには、リダイレクト処理が反映されません。

 

.htaccessファイルが影響する範囲 イメージ図

 

 

また、.htaccessファイルの設置ディレクトリが変化すると、記述内容を修正する必要が出てくる場合もあります。

 

.htassessファイルを変な場所に置くと、リダイレクトが効かなくなったり、編集の手間が増えたりして、厄介くまね。

 

.htaccessの301リダイレクト「パターン別の書き方」

.htaccessを用いた301リダイレクトの書き方を、パターンごとにまとめているです~。

実際の作業時に役立ててほしいです~。

※302リダイレクトを行う場合は、各サンプル中の[R=301,L]という記述を[R=302,L]に書き換えてください。

 

1.特定ページへのリダイレクト

https://example.com/page.htmlからhttps://example.com/new-page.htmlへ転送

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ^page\.html$ https://example.com/new-page.html[R=301,L]

</IfModule>

※.htaccessファイルを「examle.com」ドメインのトップディレクトリに設置した場合の記述例

※記述の最後は空白行を設ける。以降のサンプルでも同様。

 

2.ディレクトリ単位でのリダイレクト(同一ドメイン内)

▼「old」ディレクトリから「new」ディレクトリへ転送

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteBase /

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

</IfModule>

 

1ページずつ設定を書かなくても、まとめてリダイレクトできるから便利です~。

ただ、上記のサンプルを使用する場合は以下の点に注意してほしいです~。

 

・リダイレクト先は「/(スラッシュ)」から書き始める

・指定ディレクトリ(「old」や「new」など)より下の階層では、ファイルの名称・構成を同じにする必要がある

 

3.ドメイン単位でリダイレクト

▼「old.com」ドメインから「new.com」ドメインへ転送

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} ^old\.com

RewriteRule ^(.*) https://new.com/$1 [R=301,L]

</IfModule>

 

このパターンを使用するときも、指定ドメインより下のディレクトリでは、ファイル名や構成を同じにする必要があるので注意ですよ~。

 

4.URLの正規化

正規化って何だくま?

ひとつのページに対応するURLが複数あるとき、URLを統一することです~。

 URL中の「www」の有無を揃えたり、「http」ページを「https」ページに移行したりするときに使うです~。

 

【「www」の有り無しを統一する】

▼「www」有りに統一する

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example\.com

RewriteRule ^(.*) https://www.example.com/$1 [R=301,L]

</IfModule>

 

▼「www」無しに統一する

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.example\.com

RewriteRule ^(.*) http://example.com/$1 [R=301,L]

</IfModule>

 

【「index.html」無しに統一する】

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{THE_REQUEST} ^.*/index.html

RewriteRule ^(.*)index\.html$ https://example.com/$1 [R=301,L]

</IfModule>

 

【httpからhttpsへのリダイレクト</h3>】

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTPS} off

RewriteRule ^(.*) https://example.com/$1 [R=301,L]

</IfModule>

 

5.複数URLを同じリダイレクト先に転送

この場合、複数URLの転送先はひとつだけ、ってことくまね?

どんなときに必要になるサンプルなんだくま?

たとえば、サイト閉鎖や、メンテンナンスなどのお知らせページに転送するときに使うです~。
 

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule .* http://example.com [R=301,L]

</IfModule>

サイトメンテナンスで一時的な転送をする場合は、末尾を[R=302,L]に書き換えて、302リダイレクトに変更するのを忘れないようにするですよ~

 

6.ファイル単位のリダイレクト

▼「services/old-file.php」へのアクセスを「services/new-file.php」へリダイレクト

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteRule ^services/old-file.php /services/new-file.php [R=301,L]

</IfModule>

 

7.特定の種類のファイルのみリダイレクト

▼ファイル拡張子が「.jpg」か「.png」の場合のみ、「new-img」ディレクトリにリダイレクトする(※同ドメイン内)

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} ^.*\.jpg|\.png

RewriteRule ^img/(.+) /new-img/$1 [R=301,L]

</IfModule>

 

8.特定のディレクトリ・ファイルを除外してリダイレクト

▼ディレクトリ「dir」を除外して、新ドメイン「new.com」へ転送

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_URI} !(^/dir/)

RewriteRule ^(.*) https://new.com/$1[R=301,L]

</IfModule>

 

▼特定ファイルを除外して新ドメイン「new.com」へ転送

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !^(.*)\.(除外したいファイルの拡張子|除外したいファイルの拡張子2)$ [NC]

RewriteRule ^(.*) https://new.com/$1[R=301,L]

</IfModule>

たとえば画像やCSSファイルを除外して転送したい場合、次のように書けばOKです~。

 

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg|css)$ [NC]

RewriteRule ^(.*) https://new.com/$1[R=301,L]

</IfModule>

 

リダイレクトが効かないときの対処法

.htaccessファイルにリダイレクト設定を書いてみたけど、うまく反映されてないくま……。
リダイレクトが効かない原因は状況によってさまざまですが、代表的なものとして次の4つが考えられるです~。

 

・サーバー環境

・.htaccessのファイルパーミッション

・細かい記述ミス

・ブラウザの301転送キャッシュ

 

サーバー環境

サーバーによっては、.htaccessファイルの設置が許可されていないケースもあります。

サーバー管理会社に問い合わせたり、マニュアルを参照したりして確認しましょう。

 

また、この記事で紹介した記述サンプルは、Apacheサーバーの「mod_rewrite」モジュールが利用できる状態を前提にしています。

サーバーでmod_rewriteが作動しない場合、リダイレクト処理が実行できません。

 

利用サーバーでmod_rewriteが使えるかどうかは、下記のコードを用いて確認することが可能です。

 

▼コード内容

<IfModule mod_rewrite.c>

  ErrorDocument 404 http://www.google.com/

</IfModule>

 

▼確認方法

1.上記のコードを.htaccessファイル内に記入

2.サイト内の存在しないURLにアクセスする

→Googleの公式ページへリダイレクトされた場合は、mod_rewriteが使用できる!

→404エラーページが表示された場合は、mod_rewriteは使用できない

 

.htaccessのファイルパーミッション

.htacccessファイルのパーミッション(※)の設定が適切でないと、リダイレクト設定は反映されません。

 

.htacccessファイルで推奨されるパーミッションは、「604」「606」「644」などです。

ただし、サーバーによって異なる設定を推奨している場合もあるので、適宜ユーザーマニュアルなどを参照してください。

 

※ファイルパーミッションとは

 

ファイルごとに設定されるアクセス許可情報。

ファイルパーミッションを参照すると、そのファイルに対して、誰がどんなことをできる状態なのか確認できる。

.htaccessのファイルパーミッション設定が適切でないと、サーバー側でファイル内容の読み取りやプログラムの実行ができず、リダイレクトが反映されなくなる。

 

細かい記述ミス

.htacessファイル内の細かい記述ミスによって、リダイレクトが効かなくなるケースがあります。

記述内容について次の点を確認してみましょう。

・リダイレクト記述の最後に空白行があるか

・半角スペースが抜けてたり、余分に記述されていたりしないか

・細かいスペルミスがないか

 

また、利用しているレンタルサーバーによっては、独自の書き方をしなければならない場合もあります。

ユーザーマニュアルなどを確認してみてください。

 

記述内容だけでなく、文字コード・改行コードの間違いにも注意ですよ~。
 

ブラウザの301転送キャッシュ

リダイレクトの転送先URLを変更するとき、ブラウザに「301転送キャッシュ(※)」があると、変更情報が反映されません。

 

301転送キャッシュを残す代表的なブラウザとしては、Googleクロームがあげられます。

Googleクロームの301転送キャッシュを削除する方法については、以下のリンクをご参照ください。

https://qiita.com/tatsuo-iriyama/items/be8e8862738748986ce1

 

また、301転送キャッシュによるエラーを回避するには、.htaccessファイルを編集するとき、最初に302リダイレクトでテストすると良いでしょう。

 

転送処理が正常に作動するのを確認した後、ファイルの記述を301リダイレクトに変更すれば、ブラウザ側に余計なキャッシュを残すリスクはなくなります。

 

※301転送キャッシュとは

301リダイレクトが行われた際に、ブラウザ上に保存されるキャッシュ情報です。

 

ブラウザのなかには、301リダイレクトを認識したとき、転送前後のURLをキャッシュとして保存するものがあります。

 

その後、同じ転送元URLにアクセスがあった場合は、リダイレクト処理を省略し、保存された転送先URLに直接アクセスします。

 

このとき、.htaccessファイル内で転送先URLを変更しても、ブラウザはその内容を参照しません。

結果的に、変更前の転送先URLにアクセスされ続けてしまい、リダイレクトが反映されなくなります。

 

「.htaccessリダイレクト」のおさらい

簡単に今回のまとめをしておくです~。
まとめ

・「.htaccess」を利用するには、サーバーに「Apache(アパッチ)」と「mod_rewrite」が必要

「.htaccess」の編集は「レンタルサーバー」「Wordpress」「ローカル環境」などで行う

・リダイレクトが効かない場合は「サーバー環境」「.htaccessのファイルパーミッション」「細かい記述ミス」「ブラウザの301転送キャッシュ」をチェック

関連記事

【WordPress】常時SSL化のメリットと設定方法

サイト作成コース 一覧に戻る