WordPress で.htaccessの編集内容がいつのまにか勝手に消えている時はここをチェック!

「Wordpress で.htaccessに設定を書けばアクセス先をリダイレクトしてくれるのか~」

 

「...よし、設定OK。ちゃんとリダイレクトされてる。」

 :

数日後

 :

「あれ??.htaccessの編集内容が消えてる!?」  

 

どうも、こんにちは。”ネロ”です。

無料ブログからWordpressへ移行したりHTTP化対応の際にリダイレクト設定を行うときに、.htaccessの内容が消えてしまうことがありませんか?

ぼくもこのブログを作成する際にやってしまいました。

しかも2回も。。

存忘れかと思い2度も繰り返してしまいました。

 

もちろん保存忘れなどでは無く、原因は.htaccess内の追記場所です。  

 

.htaccessのどこに書けばよいの?

.htaccessの内容は初期状態で以下のようになっています。

SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode
# BEGIN WordPress

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

# END WordPress

 

ここで着目するのは、「# BEGIN WordPress~# END WordPress」 のコメントです。

てっきり”WordPressの設定はここに書きなさいよ”という意味かと思い、こんな風に# BEGIN WordPress~# END WordPressの間に処理を追記していました。

 

SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode
# BEGIN WordPress

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

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]



# END WordPress

 

この書き方だと暫くすると追記部分が消えて初期状態に戻ってしまいます。  

実はこのコメントの意味は、

”WordPressの設定はここに書きなさいよ”

ではなく、

”ここはWordPressが使う場所だよ”(だから使わないでね)

という意味なのです。  

 

したがって、「# BEGIN WordPress~# END WordPress」内に設定を追記してしまうと次にWordPressが.htaccessに書き込むときに初期状態に上書きされてしまいます。

カスタム設定を.htaccessに追加する場合は、こんな風に「# BEGIN WordPress~# END WordPress」の外に追記しましょう。

SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode
# BEGIN WordPress

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


RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 

.htaccessはいつ上書きされるの?

そもそもどのタイミングで.htaccessが上書きされるのでしょうか。

実はWordPressのパーマリング設定を行うと、記事更新時にWordPressのルートディレクトリに存在する.htaccessの記述が自動的に変更されるようになります。

ユーザが.htaccessの存在を意識することなくパーマリンクを変更できるこの便利機能のおかげで、自分が追記した設定が上書きされていました。

この動きに気付かず、数時間ハマってしまいました。

.htaccessってなにするの?

そもそも.htaccessとは何?という話です。

まず、読み方は「ドット・エイチ・ティ・アクセス」です。

その役割を一言で言うなら、「Webサーバをディレクトリ単位で制御するための設定ファイル」です。

 

いまいちよく分かりませんね。

本ブログの例ではWordPressで作成したサイトのWebサーバ内のディレクトリ階層は

/home/nrbm/nrbm-music.com/public_html/.htaccess

 

となっています。

そのためブラウザからWordPressのサイトにアクセスするために

「https://nrbm-music.com/ 」

と入力した場合、実際には

「/home/nrbm/nrbm-music.com/public_html/」

ディレクトリにアクセスしています。

 

このディレクトリに.htaccessが存在していて「https://nrbm-music.com/」へのアクセスに対する制御を設定できます。

「/home/nrbm/nrbm-music.com/public_html/sample/」に.htaccessファイルがあった場合、「https://nrbm-music.com/sample/」のアクセスに対しては制御が効きますが「https://nrbm-music.com/」のアクセスには効きません。

 

では.htaccessで制御できる代表的な設定を見ていきましょう。

Basic認証

アクセスしてきたユーザにID/パスワードを入力させる簡易的な認証の仕組みを提供します。

本番公開前のテスト用サイトや、特定のユーザにのみ公開したいサイトなどで使用されます。

 

リダイレクト

設定したURLにアクセスしてきたユーザを別のURLに転送(リダイレクト)させます。

サイトを移行した場合に旧URLから新URLに転送させたい場合などに使用されます。

 

まとめ

.htaccessの追記内容がいつのまにか上書きされて消えてしまうと焦りますよね。

でも何事にも原因と対処法があるためきちんと対処すればOK。

単にブログを書くだけであれば.htaccessの細かな機能は理解する必要はありません。

しかし今後同様の問題が発生したりよりカスタマイズしたくなった場合に、設定や動作の仕組みを少しだけでも理解しておくとスムーズに解決できます。

この記事が同じ悩みを抱えている方の役に立てれば幸いです。

それでは。