“500 – Internal Server Error”が出た時の原因と解決法。

error500

こんばんは。私は普段、feedlyを利用していくつかのブログを購読しています。有名なcolissさんもそのうちの一つです。
そして本日colissさんにてWordPressのセキュリティに関する記事を読み、.htaccessを久しぶりに確認してみることにしました。

その際に私のサイトで起こった問題と、解決した方法をまとめます。

.htaccessの書き方についてはcolissさんの記事でわかりやすくまとまっているので、こちらを確認してください。
WordPressでしっかり設定しておきたいセキュリティやメンテナンスに役立つ.htaccessのまとめ | コリス

500 – Internal Server Error

僕の場合、オリジナルテーマを作成した時点で既に.htaccessについては調べて書いていたので、今回は自分のものとコリスさんの記事とを照らし合わせて、足りないものを追記した形です。

そして保存・アップロードして、いざサイトにアクセスしようとした時にそいつは現れました…。

500errorキャプチャ

で、でたー! こわいやつ-!
…正直、htaccessを弄った時点で覚悟はしています。これから弄ってみようという方は必ずバックアップを取ることをおすすめします。

原因の特定法

今回はルートの.htaccessを書き加えるだけでなく、今まで設置していなかった「wp-content」ディレクトリ内の「languages」「plugins」「themes」「upgrade」「uploads」ディレクトリにも、それぞれ指定した拡張子のファイル以外拒否する.htaccessを置きました。

その際にあまり気にせず作ったので、変な文字コードになってたのかな? と調べたり、属性がおかしくなっているのかな? と調べたりしましたが改善されず。

次にとりあえず、ルートディレクトリにある.htaccessの追記した部分を全て消してみました。
すると回復したので、消した部分に問題があることになります。

ずっと、wp-contentの中に拒否してはいけないディレクトリがあったのか? という疑問が浮かんでいて、だとしたら面倒くさくて泣きながら探すことになっていたので、早めに見つかって良かったです。

あとは消した部分を一旦全て戻して、今度はもっと狭い範囲で消してアップロード&リロードして、問題のある部分の特定するのみです。

見つかった原因と解決法

原因は、

の部分でした。(1行目はコメントなので、正確には2行目部分)
これは何の記述なのか簡単に説明すると、

Apacheには、
あるディレクトリにアクセスした時に、デフォルトで表示されるよう設定されたファイル(例えばindex.html)が存在しない場合、ディレクトリの中身を一覧表示するという機能があります。
それが「Indexes」です。(細かい表現の違いはあると思いますが。)

ブラウザでこんなの見たことある人も多いんじゃないですかね。
indexesキャプチャ

これを-(マイナス)で停止させているんです。
じゃあこれの書き方がおかしいのかなと思って調べてみたら、「All」の無い

というのがたくさん出てきたので、試しに「All」だけ消してみたらエラーは出ず、問題なくサイトが表示されました。

おそらくこの「All」は、

  • 全ての機能(MultiViewsを除く)からIndexesだけを停止
  • このディレクトリ及び全てのサブディレクトリでIndexesを停止

のどちらかの意味だと思うのですが、調べてみたところどちらも「All」の記述無しに実現するとのことだったので、単に消すだけでOKでした。

Optionsディレクティブをルートに書いただけでサブディレクトリまで適用されるとなると、wp-contentディレクトリのアクセス拒否もサブディレクトリひとつひとつに置かなくて良いのでは…。

こういう時は混乱しがちなので、1日経ってからもう一度考えた方が答えが出たりしますね。

参考ページ

まとめ

ディレクトリの一覧表示を停止する際は

と記述する。
セキュリティ上、ファイルの一覧を見せることは好ましくないので、書いておいた方がいいでしょう。

さいごに

今見たら.htaccessの上から4行目にしっかり「Options -Indexes」と書いてありました。
見落としていましたが、一番最初に設定していたようです…。

まぁ当時は意味もあまり理解していなかったでしょうから、勉強になったということで。

あと余談ですけど、この記事のタイトルはよろしくないですね。
ブラウザのタブに表示されたタイトルを見る度に、え? って思ってしまいます。
それに検索結果でこのタイトルが出ていたら、エラーが出ていると思ってよく読まずに避けてしまいそうです。

コメント

この記事にはまだコメントがありません。

コメントする

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

▲ Top of the page