.htaccess でリダイレクトする方法
こんにちは、りりい です。
この記事は.htaccessを理解するために書きました。
目次
- .htaccessとは
- リダイレクトの設定
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代の生き方」「小児科クリニックの日常」の情報を発信しています。もし興味があれば、私のツイートをチェックしてみてください。ありがとうございました。