ワードプレスの301リダイレクトで地味に苦戦した話

ウェブサイトの記事URLを変更したのでhtaccessファイルで301リダイレクトをしようとしたが苦戦したのでメモを残しておく。

301リダイレクトに関して書いてある記事やらchatGPTやら参考にして下記設定をしてみた。やりたいことはhttps://example.com/dir/page1からhttps://example.com/dir/page2へのリダイレクト。要はサブディレクトリ内のpage1から同じサブディクトリにあるpage2へ引越。

ちなみに.htaccessファイルは/dir/直下に配置。

RewriteEngine On
RewriteRule ^page1$ /page2 [R=301,L]

この記述ではうまくいかず。
chatGPTに完全パスで指定しろと言われたので修正してみる。

RewriteEngine On
RewriteRule ^page1$ https://example.com/dir/page2 [R=301,L]

やはりうまくいかず。その後さまざまな記述を試すもどれもうまくいかず。そんな中たまたま海外の記事で見つけた下記記述をしてみたところ・・・

<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /dir/page1 https://example.com/dir/page2
</IfModule>

これでうまくいった!もしすでにワードプレスの記述がある場合はその下に追記すればOK。元々の記述がこうだとしたら・・・

# 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

この下に記述を加える感じ。

# 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
Redirect 301 /dir/page1 https://example.com/dir/page2
</IfModule>

ちなみに日本語URLも日本語のまま記述して問題なしでした。

<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /dir/日本語URL1 https://example.com/dir/日本語URL2
</IfModule>

複数ページリダイレクトさせる場合は単純に記述を増やせばOK。

<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /dir/page1 https://example.com/dir/page2
Redirect 301 /dir/page3 https://example.com/dir/page4
</IfModule>

サブディレクトリじゃなくてルートのリダイレクト設定であれば単純に/dir/の部分を省略すればいけるはず。試してないけど・・・。あと異なる階層のディレクトリへのリダイレクトも未検証。ごめんなさい。

自分は1万ページほどリダイレクトの設定をしたんだけど流石に500エラーになってしまった。サーバースペックに左右されるのかな。そういう時は諦めてリダイレクトするページを精査する必要がありそう。まぁ1万ページリダイレクトするなんてそうそうないとは思うけど。

あと反映されない時は

  • サーバーのキャッシュを削除

  • シークレットウインドウでアクセス

とか試してみると良いかも。参考になれば幸いです。

この記事が気に入ったらサポートをしてみませんか?