【WordPress】301リダイレクトを.htaccessで行う方法と注意点

少し前にブログのカテゴリを整理し、URLが変更になったページがあったので.htaccessを使って301リダイレクトの設定をしました。

WordPress ロゴ

しかし、何度やっても上手く動作せずハマってしまったので備忘録。WordPressで構築したサイトで、301リダイレクトをする方法(.htaccess)と注意点について。

301リダイレクトとは

301リダイレクトとは、webサイト(ページ)を「恒久的に移転先へ転送する」ことです。

転送のステータスコードとしては、他に302リダイレクトがありますが、302は「一時的な転送」を設定する時に利用します。

サイトの移転などでドメイン自体が変更になる場合や、サイト構成の変更によるURL変更など、URLが恒久的に変わる場合は基本的に301リダイレクトで対応します。

301リダイレクトの設定方法

当ブログの場合、[firefox]というカテゴリを失くし[webinfo]というカテゴリに統合したため、.htaccessに以下のように記述しました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^category/firefox https://www.webernote.net/category/webinfo [R=301,L]
</IfModule>

「^category/firefox」がリダイレクト元で「https://www.webernote.net/category/webinfo」がリダイレクト先になります。リダイレクト元の「^」は文字列の先頭を表す正規表現で、ドメイン以降の文字列の始まりと考えればOKです。

記述は間違っていないと思うのですが、何度やっても動かない…orz

WordPressはSimple 301 Redirectsというプラグインで簡単にリダイレクト設定することも可能ですが、できれば余計なプラグインは入れたくないところ。

半ば諦めかけていたところ、記述する箇所について説明しているサイトを見つけ、試したところ…ビンゴでした!

WordPressでサイトを構築した場合、.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_deflate.c~」のセクションの後にリダイレクト設定をすると、正しく動作しないことがあるようです。そのため、.htaccessの最上部にリダイレクト設定を書いたら、上手く動作するようになりました。

結構盲点だと思いますので、ハマった場合は確認してみてください。