“403 Forbidden”がimageに発生したときの対処法 | Vagrant + WordPress + Nginx

WordPress Themeを製作中、imagesフォルダにpng形式の画像ファイルを入れて反映させようとしたら、“403 Forbidden”エラーが発生した。このエラーは、ファイルへのパスは合っているが、ファイルへのアクセス権限がないためアクセスできないというものである。このエラーの対処をしたが、四苦八苦。対処法をご紹介する。

“403 Forbidden”が発生した環境

Google検索で調査してみると、”403 Forbidden”で悩んでいる人が多いことがわかる。とはいえ、環境はいろいろと違うので、私がこのエラーに遭遇した環境を記す。

WordPress + Vagrant + Nginx環境

VagrantCentOS7で立ち上げ、そこにNginxWordPressをインストールしている。NginxとWordpressのインストールは下記サイトを参考におこなった。

vagrantにwordpressの環境を構築する

余談かもしれないが、上記方法で構築するとroot権限でないと、wordpress配下のファイルやフォルダが編集できない。そのため、chownで”vagrant:nginx”として設定している。そうすると、root権限でなくても編集できるようになる。

imagesフォルダ以下が”403 Forbidden”

この環境において、”/wp-content/themes/hogehoge/images/”に新たなpng形式のファイルを設置。さて、このpng形式のファイルだが、scpコマンドでwindows10のローカルからローカルサーバへアップロードした。次のようなコマンドだ。

そして、themes内のheader.phpにその画像を取得し表示するよう指定。ブラウザを開いてみると見事“403 Forbidden”エラーである。

画像が”403 Forbidden”のときの対処法

Nginx環境において画像に対して”403 Forbidden”が発生した場合、さまざまな壁がある。

images配下の管理者権限は”nginx:nginx”でなくてはならない

1つ目に、”/wp-content/themes/hogehoge/images”フォルダの管理者権限が”nginx:nginx”でないとwordpressテーマを反映したときに画像が表示されない(”403 Forbidden”となる)。そのため、imagesフォルダは以下コマンドで管理者権限を変更する。

アクセス権限を確認

配置した画像のアクセス権限を確認する。”ls -la”コマンドで確認可能。すべて読み取り可能になっていればよい。例えば、”-rw-r–r–“といった表示だ。もし読み取りができなくなっているなら、”chmod”コマンドを使って”644″などと設定すればよい。

scpコマンドでアップロードした画像はアクセス権限が複雑なのかもしれない

私の場合、上記2つの対策をとっても”403 Forbidden”という表示から逃れることはできなかった。問題の原因を考えてみると、もう“scp”コマンドしかあり得なかった。そのため、画像のアップロードをWordpressへブラウザでアクセスして”メディアのアップロード”からおこなった。そこでアップロードした画像は、”/wp-content/uploads/hogehoge/”へ入るので、それを”/wp-content/themes/hogehoge/images”に移動。ブラウザでアクセスしてみると画像が表示された!

画像のアクセス権限はどうなっているのだろうか

画像はとりあえず表示された。しかし、なぜ”scp”コマンドによるアップロードだと”403 Forbidden”となるのか理解できない。CentOS上では、権限はきちんと設定されているのに、アクセス権限がないと表示されるからだ。”scp”コマンドでアップロードしたファイルに、見えないアクセス権限が設定されているとしか思えない。だれか教えてほしい。

まとめ

もう”403 Forbidden”エラーはみたくない。

共有する

このエントリーをはてなブックマークに追加

コメントをする

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


*