Apache環境のwordpressでパーマリンク設定による404エラーから抜け出す

このブログをそれなりの形にするため絶賛テーマ作成中なのですが、それ以前にテストサーバのチューニングに時間を取られまくっています。早くオリジナルテーマで運営したい…。

ハマったことはメモしておいていずれTipsにまとめようかと思うのですが、とりあえず一番最近困った「どこ開いても404エラー」の対応を備忘録として書きます。


スポンサーリンク

発端はテストサーバのインストールディレクトリ変更

私はここ数年サイト構築にDreamweaverを使っています。基本は全部自分でがしゃがしゃコーディングするのでそのへんのテキストエディタで十分なんですけど、ファイル管理が便利なんですよね。

DreamweaverのFTPによるファイル管理を最大限有効活用しようと思ったらリモートサーバ・テストサーバとディレクトリ構成を揃える必要があります。

Dreamweaver上のルートディレクトリをwordpressのインストールディレクトリに揃えてしまえばその上の構成が違っても同期できます(たぶん)。だけど現在使わせていただいているVALUESERVERさんでは、どうもサブディレクトリに直接つなぎにいけない。なので公開用サーバのディレクトリ構成にテスト・ローカル共に揃えてやらねばなりません。

ローカルはリモートからの一括同期でファイルを入れたので問題ありませんでした。

しかしテストサーバの方は、ディレクトリをひとつすっ飛ばしてしまってたんですね。そこでWordPress を専用ディレクトリに配置する[wordpress公式Wiki]を参考にディレクトリのお引っ越しを行いました。ついでにIP打てばリダイレクトでwordpressに飛べるようにも設定。

あとはパーマリンク更新すれば表示できるっしょ!と軽く考えていたのですが。ところがどっこい。

まず.htaccessをパーマリンク更新で上書きできない

出たよ権限問題~!「.htaccessを編集する必要があります。」出たよ~!

wordpressでパーマリンクの変更を行うと、.htaccessにリライト情報が吐かれます。これ、元からwordpressで吐いてその後もwordpressからだけ編集していれば特に問題はないのですが、変にFTPユーザから新規作成しているとapacheユーザ(Webからのリクエストを受け取って色々やってくれるユーザ)に書き込み権限がなくて弾かれてしまうんですよね。

世の公開サーバではそのあたりちゃんと考慮したチューニングがされているとは思いますが、うちのテストサーバはただの素人(私)が見よう見まねで作っただけなのでそんな考慮されているわけがない。

というわけでroot先生からchown使って.htaccessの所有者をapache:apacheに変更、ついでにFTPユーザからの編集も受け付けられるようにchmodで権限を707に設定。604でもいいのかな??このあたりは公開サーバではないので適当。なんならいっそ全てのファイルを777にしてしまいたい。

で、再度パーマリンクの変更を行うと、.htaccessの更新に成功しました。

これでいけるはず、とトップページを開きます。引っ越し自体はうまくいっていたのでブログサイト自体は表示されました。しかし。

「記事が見つかりません」

……WHY?

単なるトップページなのに記事が見つからない。実投稿データはインポートしていない段階でしたが、「Hello,World!」はあるはずなんですよ。記事はある。でも見つからない。

もしかして、と試しにカスタム投稿タイプのアーカイブに飛んでみます。「404 not found」。Oh……。

以前にもwordpressでサイトを構築したことはあるので、404エラーが多発するときはだいたいパーマリンク設定が悪い、という認識がかろうじて記憶の片隅に残っていました。

というわけで、「wordpress 404エラー パーマリンク」教えてGoogle先生!!


スポンサーリンク

Apacheで.htaccessの使用を許可する必要があった

mod_writeの有効化

色々調べていたところ、「使っているサーバでmod_rewriteが有効になっていますか?」という問いかけに遭遇しました。

「はい?mod_rewrite?なにそれ美味しいの?」

どうやらApache側の設定で.htaccessによるURLのリライトを有効にする、という手順が必要だったようです。

まず有効になっているかどうかを確かめなければと思い、こちらのページ[WordPressの引越しでパーマリンクの404 Not Foundエラーが発生]を参考に検証してみました。

まずは下記コマンドでhttpd.confにrewriteモジュールを読み込む設定があるかどうかを確認。
# grep mod_rewrite /etc/httpd/conf/httpd.conf
エンター!!……なにも返ってこない。設定してなかった!してなかったよママン!!

それから、下記コマンドでモジュールそのものがあるかを確認。
# find / -name mod_rewrite.so -print
こちらはちゃんと返答が返ってきました。あった!あったよママン!!(最近のApacheであればインストールしたときに標準でパッケージングされているそうです。)

というわけでhttpd.confに以下の一文を追加。
LoadModule rewrite_module modules/mod_rewrite.so
余談ですが私はviの使い方がわからないのでgeditでやってますwww

保存して、サービス再起動をします。
# systemctl restart httpd.service

それから念のためパーマリンクをもう一度更新。で、トップページを表示……「記事が見つかりません。」なんでやねん!!

各ディレクトリに対して.htaccessの使用を許可する

早漏もいいところなんですけど、もう一箇所httpd.confで確認しなければならない設定があったんですね。<Directry “ディレクトリパス”>~</Directry>のAllowOverrideの値です。ここで指定のディレクトリで.htaccessを使用可能にするかどうかの制御を行うようです。

/var/www/html/のAllowOverrideの値を見てみると、安定の「None」。これやー!wordpressをインストールしているディレクトリなんてそもそも設定なんもしてないし。

.htaccessはURLリライト以外にも認証やらなんやら色々できる子なので、AllowOverrideの値もどの機能を有効にするかで細かく制御できるみたいです。

が、公開サーバじゃないし(本日3回目)
AllowOverride All

で、保存してサービス再起動!パーマリンク更新!ブラウザで確認!!

表示された!!表示されたよママン……!!!!

という、そんなことにばかり時間をかけていてちっともテーマ作成が捗らないのでした。この土日でなんとかできたらいいなあ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*