2021年2月21日

WordPressで.htaccessを使ったリダイレクトが効かない(反映されない)とき

問題

WordPressサイトのディレクトリを変更したので、.htaccessで旧アドレスをリダイレクトしようとしたが、.htaccessの設定が全く反映されない

状況

WordPressで構築したサイトのアドレスを
https://example.com/blog/
から
https://example.com/
に変更したので、旧アドレス(各記事やカテゴリ)からのアクセスを適切な新アドレスにリダイレクトしようとした。

Webサーバーのルートディレクトリ

/www/
とする。

サーバーのドメイン設定

https://example.com/を/www/に対応させている。

WordPressのインストール先

ルートディレクトリ(/www/)直下に作成した”blog”ディレクトリ(blog/)にインストールしていた。
ディレクトリ構成はこのまま維持。

WordPressのサイトアドレス変更

WordPressのインストール先であるblogディレクトリにある”.htaccess”ファイルと”index.php”ファイルを、
ルートディレクトリ(/www/)にコピー

index.phpファイルについて以下の部分を編集

/** Loads the WordPress Environment and Template */
変更前:require( dirname( __FILE__ ) . '/wp-blog-header.php' );
↓
変更後:require( dirname( __FILE__ ) . '/blog/wp-blog-header.php' );

WordPressのダッシュボードにてサイトアドレスを変更

ダッシュボードの「設定」→「一般」にて
「サイトアドレス(URL)」を
https://example.com/blog/
から
https://example.com/
に変更

ここまで来れば、あとはルートディレクトリ(/www/)の.htaccessにリダイレクト設定を記述してやれば作業完了!、、、となるはずだった。

リダイレクト内容が全く反映されないorz。

問題の原因と解決

原因:インストールディレクトリ(blog/)に置きっぱなしにしていた”.htaccess”ファイル

先の作業で”.htaccess”ファイルをインストールディレクトリ(blog/)からルートディレクトリ(/www/)にコピーした。
その時、インストールディレクトリ(blog/)の”.htaccess”ファイルをそのままにしていた。
ルートディレクトリ下の.htaccessがインストールディレクトリ下の.htaccessと競合していたか?
ゆえに、

解決:インストールディレクトリ(blog/)下の”.htaccess”ファイルの内容を全消去して保存

無事にリダイレクト設定が反映されるようになった。めでたし。

補足:.htaccessのリダイレクト設定について

WordPressのカテゴリIDをパラメータとした旧URLのリダイレクト

まずサイトのトップページへのアクセスについて
旧アドレス:https://example.com/blog/

新アドレス:https://example.com/
にリダイレクト

また、

カテゴリidが15であるパラメータ(下記”?”に続いているのがパラメータ)のリダイレクト
旧アドレス;https://example.com/blog/?cat=15

新アドレス:https://example.com/tag/new
にリダイレクトする場合の記述
(※WordPressによって先に記述されている”# BEGIN WordPress”で始まる行よりも前に記述する必要がある。)

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{QUERY_STRING} ^cat=15$
  RewriteCond %{HTTPS} on
  RewriteRule ^blog/$ https://example/tag/new/? [R=301,L]
  
  RewriteRule ^blog/$ https://example/ [R=301,L]
  
 </IfModule>

WordPress独自のサイト内リダイレクト機能を停止

WordPressには存在しないアドレスのアクセスについて、それらしいアドレスに勝手にリダイレクトしてくれる機能がありますが、なんとなくリダイレクトされていたので.htaccessが機能していないことに気づくのが遅れました。

WordPressのリダイレクト機能の停止はfunctions.phpに以下を記述

//----------------------------------------------------
//自動リダイレクトを停止
//----------------------------------------------------
function stop_redirect( $redirect_url ) {
	if ( is_404() )
	return false;
	return $redirect_url;
}
add_filter( 'redirect_canonical', 'stop_redirect' );

コメントはこちらから

メールアドレスは公開されません。 が付いている欄は必須項目です

タグ一覧

© 2024 びわ湖のほとりの人 All Rights Reserved.