昨日の記事で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」としてアクセス出来なくなってしまいました。
おや?
図:エラー画像
早速/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です。
勉強になったです。