Apacheのアクセス制御

xxx.xxx.xxx.xxxだけが見れるようにしたい。
全体を拒否してから、一部許可する場合は「Order Allow,Deny」だったはず。でもAllowが先なのに全体を拒否ってなんかわかりにくいから、その後に「Deny From all」を入れて、「Allow from xxx.xxx.xxx.xxx」と入れたわけです。まとめると以下。

Order Allow,Deny
Deny from all
Allow from xxx.xxx.xxx.xxx

結果、誰も見れない。

素直に下記のように変更。

Order Allow,Deny
Allow from xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxだけが見れる。なぜだ!

こういうときは公式マニュアルを読もう…。mod_authz_host – Apache HTTP Serverによると、

Allow,Deny
Allow ディレクティブが Deny ディレクティブの前に評価されます。 アクセスはデフォルトで拒否されます。Allow ディレクティブに合わないか、Deny ディレクティブに合うクライアントはアクセスを拒否されます。

ふむむ。「Allow ディレクティブに合わない」ということはxxx.xxx.xxx.xxxではないクライアントは全て拒否される。そして、「Deny ディレクティブに合うクライアントはアクセスを拒否」ということは、全てのクライアントが拒否されるわけだから…誰もアクセスできないが成り立つ!

いまいちまだ直感的に理解できないけど、とりあえず解決。

  • ブックマーク
  • Feedly

この記事を書いた人

キタジマタカシ

長崎在住、フリーランスのWordPress テーマ / プラグインデベロッパー。 多数のプロダクトをオープンソースで開発・公開しています。現在は WordPress 有料テーマ Snow Monkey を開発・販売しています。