htaccessで特定のページを301リダイレクトする方法
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
Web制作の中でサイトの引っ越しやURLの変更等によりhtaccessを編集する機会は多くあると思います。しかも最近はサイト全体の常時SSL化が必須になってきてますので、フロントよりのエンジニアの方もhtaccessを触ることが多いのではないでしょうか。htaccessはサーバのディレクトリ単位で制御するファイルとなりますが、ページ単位でのリダイレクトも可能となっています。
今回はドメインやページのURLの変更した際に役立つページ単位のリダイレクト方法をご紹介したいと思います!
ディレクトリ構成
本記事では以下のディレクトリ構成を使用して解説しています。旧ドメインのサイト内にあるファイルにアクセスがあった際に新ドメインのサイトのファイルにリダイレクトすることを想定していますが、同一ディレクトリ内でのリダイレクトも可能です。
#ディレクトリ構成
www #ドメイン
┗ old-example ← (old-example.com)
┃
┣ .htaccess
┃
┣ html
┃ ┗ html-01.html
┣ jquery
┃ ┗ jquery-01.html
┣ php
┃ ┗ php-01.html
┗wordpress
┗ wordpress-01.html
www #ドメイン
┗ new-example ← (new-example.com)
┃
┣ html
┃ ┗ html-01.html
┣ jquery
┃ ┗ jquery-01.html
┣ php
┃ ┗ php-01.html
┗wordpress
┗ wordpress-01.html
用語
RewriteEngine
Onと記述することでリダイレクトが有効になります。リダイレクトを設定するにはApacheモジュールのmod_rewriteが有効になっている必要があります。(ほとんどのレンタルサーバでは有効になっています。VPSをご利用の場合はmod_rewriteのモジュールをインストールしましょう。)
RewriteBase
リダイレクトのベースとなるディレクトリを設定します。本記事のディレクトリ構成ではドメインを当てているディレクトリの直下にhtaccessを設置しているため「/」となります。
RewriteBase
URLの書き換えルールを記述します。
ページ単位でリダイレクトを設定する
ページ単位のリダイレクト設定例です。旧サイトにアクセスが有った場合に新サイトにリダイレクトされるようになります。
# ここにアクセスがあったら https://old-example.com/html/html-01.html ↓ # ここにリダイレクトしたい https://new-example.com/html/html-01.html
htaccess
# old-exampleの.htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^html/html-01.html https://new-example.com/html/html-01.html [R=301,L] </IfModule>
複数ページでリダイレクトを設定する
リダイレクトを設定したいページが複数ある場合はRewriteRuleを下に追加していきます。
# 1. ここにアクセスがあったら https://old-example.com/html/html-01.html ↓ # ここにリダイレクトしたい https://new-example.com/html/html-01.html # 2. ここにアクセスがあったら https://old-example.com/jquery/jquery-01.html ↓ # ここにリダイレクトしたい https://new-example.com/jquery/jquery-01.html
htaccess
# old-exampleの.htaccessに追記 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^html/html-01.html https://new-example.com/html/html-01.html [R=301,L] RewriteRule ^jquery/jquery-01.html https://new-example.com/jquery/jquery-01.html [R=301,L] </IfModule>
WordPressのhtaccessにリダイレクト設定を追加する
WordPressのhtaccessに独自のルールを追加する場合は、下記に追加していきます。
htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# ここに追加する
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^html/ https://new-example.com/html/ [R=301,L]
</IfModule>
以上、htaccessを使ってページ単位で301リダイレクトを設定する方法のご紹介でした!