はじめに
皆さんは日々の業務などで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 WordPresstと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行目
このあたりの処理を見ていただくと確認できるかと思います。
滅多にパーマリンク設定を変更する機会はありませんが、サイトのお引っ越し時にパーマリンク変更する時もありますので、覚えておいて損は無いかと思います。
少しでもお役に立てましたら、幸いです 🙇♂️