WordPressの.htaccessが勝手に書き換えられる?

2013年6月27日

前回「Basic認証は大事だよ」という記事を書いていて思い出したこと。
このブログを立ち上げて間もない頃だったと思いますが、.htaccessファイルが勝手に更新されていて、自分で設定した記述がきれいさっぱり消えてしまっていることが何度かありました。
同じ事象で悩んでいる方がいるかもしれないので書いておきます。

.htaccessが書き換わってしまう原因と対処

とその前に.htaccess関連の過去記事:
WordPressのログイン画面にBasic認証をかける
WordPressのパーマリンク設定で気をつけること

WordPressが自動で生成した.htaccessファイルには下記のように書かれています。
# BEGIN WordPress

# END WordPress
パーマリンクの設定を行うと「BEGIN」の次の行に記述が追加されます。
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


# END WordPress
その後、Basic認証の設定のために自分で記述を追記してみたり。
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /var/.htpasswd
Require valid-user


# END WordPress
今後も「BEGIN」と「END」の間に書き足していけばいい、と思っていたのですが…これはベストな書き方ではないようです。

「BEGIN」と「END」の間には追記しない

なんらかのタイミング、これがいつなのかよく分からないのですが、WordPressが勝手に.htaccessを更新することがあります。すると「BEGIN」「END」間に自分で追記した記述が全て消えてしまいます。
リダイレクトの設定が消えたりBasic認証が外れたり。とても困る。
でも「BEGIN」「END」の外に書いた記述は消されません。

AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /var/.htpasswd
Require valid-user


# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


# END WordPress
こんな感じに書き足してしまえばOK。.htaccessでの設定は上から順に実行されるので、「BEGIN」より上に記述すると良いです。

apacheに書き込み権限を与えない

勝手にファイルが書き換わることを完全に防ぎたいなら、WordPressに書き込み権限を与えないというのもアリ。
自動生成された.htaccessのファイル所有者がapacheになっているのであれば、パーミッションの設定でapacheの書き込みを不可にしてしまえば問題ないです。
ただし、パーマリンクの再設定を管理画面で行ったときなど、WordPressが.htaccessを書き換える必要があるときにこの設定がされているとエラーが起こる可能性大なのでご注意。


——————–

更新頻度がどんどん下がってきてることに危機感を感じ、今月後半は怒涛の更新でした(笑)。これで5月の記事数より減る事態は避けられたぞ。
シノブさんにも月1ペースで登場してもらおうと思ってます。ネタがないと騒いでたので「数の子を噛んだときの音が自己主張激しすぎる件について」と指定しておきました(ぇ