はじめに
皆さんは日々の業務などでWordPressのパーマリンク設定を変更する機会はありますか?また管理ページから変更したパーマリンク設定は、どのように制御されているかご存知でしょうか?
パーマリンク設定を変更するとWordPressが自動で .htaccess
ファイルを更新し、appcheがファイルを読み取ることでパーマリンクが反映される流れになっています。
このWordPressによる.htaccess
の自動更新を理解していなかったために、WordPressサイト移行時に手間取ってしまいました。同じ悩みを抱えている方がいらっしゃるかもしれませんので、こちらで共有させていただきます🙋♂️
こんな方におすすめ
- WordPressサイトを運営している方
- WordPressサイトのディレクトリ変更を予定している方
先に結論
-
.htaccess
のBEGIN WordPress
とEND WordPress
の間に独自のパーマリンク設定を書いてはいけない -
BEGIN WordPress
とEND WordPress
の間はWordPressが自動で変更してしまう
詳しく紹介
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
BEGIN WordPress
と書かれているので、ついつい「WordPressのリダイレクト設定はここに書けば良いのかな?」と勘違いして、独自のリダイレクト設定などもこの後に続けて記述すると、パーマリンクを変更したタイミングで消えてしまいます。
独自のパーマリンク設定を追記したい場合は、以下のようにBEGIN WordPress
tと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
# Origin Setting
<IfModule mod_rewrite.c>
RewriteEngine On
RedirectMatch 301 ^/hogehoge/(.*) /fugafuga/$1
</IfModule>
# Origin Setting
ちなみにパーマリンク設定を変更した際の処理は
-
wp-admin/options-permalink.php
- 91行目
if ( isset($_POST['permalink_structure']) || isset($_POST['category_base']) )
- 91行目
-
wp-includes/class-wp-rewrite.php
- 1027行目
public function set_permalink_structure($permalink_structure)
- 1027行目
このあたりの処理を見ていただくと確認できるかと思います。
滅多にパーマリンク設定を変更する機会はありませんが、サイトのお引っ越し時にパーマリンク変更する時もありますので、覚えておいて損は無いかと思います。
少しでもお役に立てましたら、幸いです 🙇♂️