treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

(2/2)WordPressでmod_rewriteを有効にするときのポイント

昨日の記事でWordPressのmod_rewriteを有効化しました。
と、思っていたら、思わぬ落とし穴が一点あり、時間をロスしてしまいました。

症状

昨日まででmod_rewriteを有効化し、WordPressで望みの動作ができるようにしました。<(1/2)WordPressでmod_rewriteを有効にするときのポイント - treedown’s Report>

ですが、実際にユーザがWordPress管理者ページを利用しようと
http://www.mydomain.hoge.com/wordpress/wp-login.php」にアクセスしたところ
「Internal Server Error」としてアクセス出来なくなってしまいました。
おや?

図:エラー画像

f:id:treedown:20161011212043p:plain

早速/var/logからapacheのエラーログを見てみると
[Mon Day XX:XX:XX XXXX] [alert] [client XXX。XXX.XXX.XXX] /var/www/html/wordpress/.htaccess: Illegal option …
とあります。
どうやら.htaccessファイルが関係しているっぽいログの記述です。

さっそく確認

様子を見てみることにします。
対象のディレクトリを見てみると確かに.htaccessファイルが存在しています。デフォルトで配置されたファイルだと思われます。

$ ls -la | grep .htaccess
-rw-r--r-- 1 webauthor webauthor 86 Oct 29 2014 .htaccess

中身、みてみましょうかね。
----------------------------------------------
$ cat .htaccess
<files wp-config.php>
order allow,deny
deny from all
</files>
Options ?Indexes
----------------------------------------------

うーんmod_rewriteを有効化するだけで動作が改善すると思っていたんですけど、そうじゃないのかなぁ。

やってみる

ひとまず
※WordPress Codex 日本語版<パーマリンクの使い方 - WordPress Codex 日本語版>で見たところ、このページに記述があるようにmod_rewrite関連の記述(リライトコード)を手動で追記してみます。

----------------------------------------------
# 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
----------------------------------------------

パーミッションがあれば勝手に追記されると思っていたのですが、違うのかなぁ。
(もやもや、初心者丸出し)

実際にこれで別ユーザで試してみました。
結局動作は変わらず。Internal Server Error 500になってしまいます。

前述の公式オンラインマニュアルをよく見てみると…
「.htaccess ファイルに ("Internal Server Error (500)") をもたらすエラーが含まれている場合は、FTP またはホスティングサービスの管理パネル を使用して欠陥のある .htaccess ファイルを削除する必要があります。」
と記述があります。
そうか。
いったん消さないといけないのね。

ということで、

$ sudo mv .htaccess .htaccess.back

とリネームして.htaccessファイルをないようにしてみました。

再度ログインしてみると
ようやく、Internal Server Error 500が解消、無事ログインぺージを表示することができました。

どうやら結論として、
mod_rewriteを有効化していないシステムのWordPressで、必要があってmod_rewriteを有効化した場合には、現在の.htaccessファイルを削除(※)する
という必要があるようです。
※削除、というのはApacheやWordPressから見えなくなればそれでいいので、別ディレクトリに移動してもいいですし、.htaccessファイルとして認識しないようなファイル名にリネームでもOKです。

勉強になったです。