読者です 読者をやめる 読者になる 読者になる

treedown’s Report

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

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

サーバ トラブルシューティング

今日は久々WordPressの話題をご報告です。
インストールしてしばらく使われていなかったWordPress、ちょっとした設定が必要となりました。
一言で言うとmod_rewriteの設定が必要になった、というものです。

WordPressでページの作成をしていると…

パーマリンクを設定して公開するようにし、固定ページを表示とかLPを表示をク
リックしたり変更をプレビューをクリックして選択すると、エラー「Not Found」になっちゃいまして…
「このウェブサイト上に、そのURLが見つかりません」
とエラーメッセージが表示され、想定している動作が実行されない(ページが出てこない)という状況。

別の操作でも「.htaccess を更新する必要があります。」というメッセージが表示、設定からパーマリンク画面の下部には「あなたの .htaccess が書き込み可能ならこの操作は自動的に行われますが、(云々)」というメッセージが表示されます。
WordPress がファイルを編集できなくてエラーになっているようです。

解決策は

※WordPress Codex 日本語版<パーマリンクの使い方 - WordPress Codex 日本語版>で見たところ…

「mod_rewrite」を有効化する、ないし.htaccessファイルを用意する必要があるようです。

おかしいな…。.htaccessファイルはWeb管理者ユーザなら更新できるようにしてあったはずなんですけども…?

ひとまずmod_rewriteを有効化する、という対処が必要という結論に達しました。

ちなみに対象の環境はDebianのApache2.2系です。

mod_rewriteを有効化する

確か以前ハマった時の記憶で「AllowOverride」でAllやNoneを定義してmod_rewriteを制御する、という方法だった記憶をもとに、apacheのconfファイルを探してみました。
AllowOverrideがどうかを確認しようと以下のコマンド、

$ cat /etc/apache2/apache2.conf | grep AllowOverride | less

を実行してみると…
あれ?なんも出てきません。
前にCentOSでやったときは確かhttpd.confにAllowOverrideが記述されていたんだけどなぁ。

ひとまずrewrite.loadがあるかどうかを確認します。
----------------------------------------------
$ cat /etc/apache2/mods-available/rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
----------------------------------------------

mod_rewrite.soはLoadModuleにあるので問題なさそうです。
有効かどうか、というのも確認しておきます。

----------------------------------------------
$ ls -al /etc/apache2/mods-enabled/rewrite.load
lrwxrwxrwx 1 root root 30 Oct 29 2014 /etc/apache2/mods-enabled/rewrite.load -> ../mods-available/rewrite.load
----------------------------------------------

む、どうやら既にmod_rewriteは有効化されています。
と、いうことは、apacheの設定ファイルで有効化されていないってだけですね。
ちょっと調べてみると、AllowOverrideの記述は「/etc/apache2/sites-available/default」内で定義されていました。

----------------------------------------------
$ sudo vi /etc/apache2/sites-available/default
----------------------------------------------

でさっそくWordPressディレクトリ配下の「AllowOverride All」の設定を追記します。「AllowOverride None」があればコメントアウトなり削除なりしておく感じですね。
ここでapache再起動。

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

続きは明日へ。

f:id:treedown:20161011212043p:plain