こんにちは、インフラエンジニアのryuです。
今回は、Xserverの.htaccessが初期化される問題の対処方法について解説していきます。私のサイトでは、.htaccessファイルにアクセス制限やリダイレクトの設定をしています。しかし、先日全て初期化されていました。問題は設定値の書く位置に問題がありました。対処方法について詳しく解説していきます。
Xserverの.htaccessが初期化される問題の対処方法
Xserverの.htaccessが初期化される問題の対処方法は、設定値の書く位置を変えれば対処できます。
そもそも.htaccessとは、Directoryごとにアクセス制限などの設定を記述できる設定ファイルになります。Apacheでは、使用することを推奨されていません。apache.confに設定ファイルを書くようにしています。
しかし、Xserverでは.htaccessの設定ファイルを変更する項目があるので、そこから設定しています。普通のapacheとは何か違うのか疑問に思い調べてみました。
では、詳しく解説します。
.htaccessの構造
.htaccessのファイルの中見は以下のようになっています。
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode
# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、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
SetEnvIf Request_URI ".*" WpCommentNoLimit
SetEnvIf Request_URI ".*" WpCommentDeny
これは、XserverでWordpressを作成したときにデフォルトで生成される.htaccessファイルです。
私はこの中に、アクセス制限とSSLリダイレクトの設定をしていました。しかし、何度も設定が初期化される問題が発生しました。
問題は、以下のコメント文でした。
# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
・・・
# END WordPress
これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
ということです。
このコメント文の間にある設定値は全て上書きされてしまうそうです。
気が付かなかった。。。
普段Apacheの設定では.htaccessをほぼ使わないので、Wordpressには、このような設定があることは知りませんでした。
コメント文の範囲以外に設定値を書こう!
つまり、コメント文の範囲以外に設定値を書けば問題ありません。
私は以下のように設定しました。
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode
#ここから私の設定
#SSLへのリダイレクト
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
#管理サイトへのアクセス制限
<Files "XXXX.XXXX"> #管理サイトのファイル
order deny,allow
deny from all
allow from XXX.XXX.XXX.XX #許可するIPアドレス
</Files>
#私の設定終わり
# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、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
SetEnvIf Request_URI ".*" WpCommentNoLimit
SetEnvIf Request_URI ".*" WpCommentDeny
設定を上の方に書きました。これで、ファイルの初期化は対処できると思います。
対処方法まとめ
Xserverの.htaccessが初期化される問題の対処方法のまとめです。
結論は、コメント範囲外の部分に設定を書くということです。
私は、不正アクセスされたのではないかと勘違いしてしましました。.htaccessへのアクセスを解析したり、ログインユーザのパスワードを変えたりしたり、無駄なことをしてしまいました。
システムが変われば、動作が変わるので、思い込みで無駄な対応をしないように心掛けていきたいと思います。
以上で解説を終わります。