リリイログ Written by Yumi Nakamura

.htaccess でリダイレクトする方法

プログラミング

こんにちは、りりい です。
この記事は.htaccessを理解するために書きました。

目次

  1. .htaccessとは
  2. リダイレクトの設定

1..htaccessとは

.htaccessとは、Apache Webサーバーで使用される設定ファイルの一つです。このファイルを使用することで、Webサイトの様々な設定を行うことができます。
.htaccessファイルで、以下のような設定をすることができます。

  • リダイレクトの設定
  • アクセス制限の設定
  • MIMEタイプの設定
  • キャッシュの設定
  • エラーページの設定

これらの設定をすることで、Webサイトの機能性やパフォーマンスを改善することができます。
ただし、.htaccessファイルは、誤った設定を行うと、ウェブサイトの動作に影響を与えることがあるため、注意が必要です。設定を行う前に、バックアップを取ることが大事です。

2.リダイレクトの設定

ページ単位の301リダイレクト

ページ単位、あるいは、ディレクトリー単位で、リダイレクトさせたい場合、301リダイレクトを設定します。
301リダイレクトとは、恒久的なリダイレクトで、「URLが、元のアドレスに再び変更されることがない」とサーバーに伝える役割をします。「旧ページへのアクセスを、自動で新ページへアクセスさせる」ようなケースで、301リダイレクトは有効な設定です。

301リダイレクト 基本の記述

以下のようにRewriteRuleディレクティブを書きます。

RewriteEngine On
RewriteRule ^old-page.html$ https://sample.com/new-page.html [R=301,L]

上記の例では、古いページのURL「old-page.html」を新しいページ「new-page.html」にリダイレクトする設定をしています。

・RewriteEngine On: Rewrite機能を有効化するための設定
・RewriteRule: リダイレクトを行うためのディレクティブ
・^old-page.html$: 古いページのURL
・/new-page.html: リダイレクト先のURL
・R=301: リダイレクトのHTTPステータスコードを指定(301:永久リダイレクト)
・L: このルールで処理を終了することを指定

「リダイレクトの宣言(RewriteRule)」「^旧URL$」「新URL(絶対パス)」「301宣言([R=301,L])」の順で、記述しています。
「^旧URL$」部分で「^」の後、あるいは「$」の前にスペースがあるとエラーになってしまいます。設定する旧要素との間にスペースが入らないように注意してください。

ディレクトリ名の変更

http://example/old-dir/から、http://example/new-dir/のようにディレクトリ名を変更するには

RewriteEngine On
RewriteRule ^old-dir/$ new-dir/ [R=301,L]

.htaccess内で行頭に#を記述するとコメントアウトすることができます。

ページ→ディレクトリの変更

静的サイトから、WordPressで構築して、リニューアルする際などにありがちな、http://example/old-dir/index.html から http://example/new-dir/ に書き換えるといった設定もできます。

RewriteEngine On
RewriteRule ^old-dir/index.html$ /new-dir/ [R=301,L]

ディレクトリ名もページ名も変更

http://example/old-dir/old-page.html → http://example/new-dir/new-page.html のように、ディレクトリ名もページ名も変更するには

RewriteEngine On
RewriteRule ^old-dir/$ new-dir/ [R=301,L]
RewriteRule ^new-dir/old-page.html$ new-dir/new-page.html [R=301,L]

古いディレクトリ「old-directory」の下の古いページ「old-page.html」を、新しいディレクトリ「new-directory」の下の新しいページ「new-page.html」にリダイレクトします。
先にディレクトリ名を変更しておいて、新しいディレクトリ内の旧ページ名を新ページ名に変換するという手順で設定します。

wwwあり・なしをリダイレクト設定で統一する方法

特定のアドレスを書かずに設定する方法 

wwwありで統一する場合の設定

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

wwwなしで統一する場合の設定

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,L]

アドレスを記述して設定する方法 

使用するドメインが仮に「example.com」だった場合

wwwありで統一する場合の設定

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

wwwなしで統一する場合の設定

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

httpへのアクセスを、httpsに301リダイレクト(転送)させる方法

httpからhttpsに、301リダイレクト

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

http→httpsのリダイレクトと、www有無統一リダイレクトを同時に設定する方法

wwwありで統一する場合の設定

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

wwwなしで統一する場合の設定

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,L]

WordPressでの設定方法

WordPressの場合、管理画面で、設定の一般の項目で、WordPressアドレス(URL)とサイトアドレス(URL)が、https://~と記載されているか確認します。
記事や、テンプレートの内部リンクも、https://~で記述されていることを確認します。

.htaccessに設定する内容は


 RewriteEngine On
 RewriteBase /
 RewriteCond %{HTTPS} off
 RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]

WordPressの場合は、インストール時点で .htaccessが生成され、RewriteEngine Onも設定されるので、

RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

の部分を追記します。

以上です。私のブログを読んでいただきありがとうございます。Twitter で、プログラミングや「60代の生き方」「小児科クリニックの日常」の情報を発信しています。もし興味があれば、私のツイートをチェックしてみてください。ありがとうございました。