.htaccessでリダイレクトができないときは記述場所を確認しよう

問題

ドメイン変更にあたり、サイト全体のURLに301リダイレクトをかけようとしましたが、topページしかリダイレクトがかからず悩みました。

# 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

# Custom Redirects
RewriteCond %{HTTP_HOST} ^www\.old\.com$ [OR]
RewriteCond %{HTTP_HOST} ^old\.com$
RewriteRule ^(.*)$ https://new.com/$1 [R=301,L]

状況

WordPressが使用されており、デフォルトで.htaccessにWordPressのリライトルールが記述されていました。

記述する場所

WordPressを使用している場合、注意点があります。

それは追記する場所です。

WordPressのリライトルールより上に記述しましょう。

WordPressのリライトルールより下に記述してしまうと、WordPressのリライトルールと競合してしまいます。

新しく追記するリダイレクトルールが適切な場所に配置されていることを確認しましょう。

# ここに記述していく

# 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
# Custom Redirects
RewriteCond %{HTTP_HOST} ^www\.old\.com$ [OR]
RewriteCond %{HTTP_HOST} ^old\.com$
RewriteRule ^(.*)$ https://new.com/$1 [R=301,L]

# 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