Edited at

.htaccess(Apache) の Order Allow,Deny(またはDeny,Allow)について

More than 1 year has passed since last update.


  1. .htaccess の書き方(リダイレクト編)

  2. .htaccess の書き方(アクセス制御編)

  3. .htaccess(Apache) の Order Allow,Deny(またはDeny,Allow)について

  4. .htaccess の書き方(スピードアップ編)

  5. .htaccess の書き方(設定変更編)

.htaccess や Apache の http.conf 等で記述する Order Allow,Deny(またはDeny,Allow) について


Order は後に記述された方がデフォルトになる

SQLのorderと違って後方が優先されます。

Order Allow,Deny ならデフォルトはDeny(拒否)

Order Deny,Allow ならデフォルトはAllow(許可)

Order しか書かれていなければデフォルトが有効になります。

以下の場合は全てのアクセスが拒否になります。

Order Allow,Deny

デフォルト拒否なので

これに Deny をいくら加えても結果は同じ。

Order Allow,Deny

Deny from XXX.XXX.XXX.1
Deny from XXX.XXX.XXX.2

Order Allow,Deny

Deny from all

これに Allow を加えれば

「デフォルト拒否だけど○○は許可」となります。

以下は特定IPアドレスからのアクセスだけ許可。

Order Allow,Deny

Allow from XXX.XXX.XXX.1
Allow from XXX.XXX.XXX.2

Allow と Deny を入れ替えれば

「デフォルト許可だけど○○は拒否」となります。

以下は特定IPアドレスからのアクセスだけ拒否。

Order Deny,Allow

Deny from XXX.XXX.XXX.1
Deny from XXX.XXX.XXX.2

デフォルト拒否のところに Allow from all を加えると、

「デフォルト拒否だけど全て許可」となるので

結果「全て許可」になります。

Order Allow,Deny

Allow from all

さて、ここで問題。

ここに Deny from all を追加するとどうなるでしょう。

Order Allow,Deny

Allow from all
Deny from all

答えは後方が優先されるので「全て拒否」になります。

書く順番を変えても結果は同じ。

Order Allow,Deny

Deny from all
Allow from all

Order を後に書いても結果は同じ。

Deny from all

Allow from all
Order Allow,Deny

ただ、この書き方だと混乱を招くので、みんな Order を先に書く習慣になっているんですね。


全拒否の記述例

以下は全て全拒否になります。

# Order でデフォルト拒否

Order Allow,Deny

# Deny で全て拒否

Deny from all

Order Allow,Deny

Deny from all

# デフォルト許可だけど Deny で全て拒否

Order Deny,Allow
Deny from all

# 後方が優先され全て拒否

Order Allow,Deny
Allow from all
Deny from all


全許可の記述例

以下は全て全許可になります。

# 何も書いてなければ何もおきない

# Order でデフォルト許可

Order Deny,Allow

# Allow で全て許可

Allow from all

Order Deny,Allow

Allow from all

# デフォルト拒否だけど Allow で全て許可

Order Allow,Deny
Allow from all

# 後方が優先され全て許可

Order Deny,Allow
Deny from all
Allow from all


一部許可の記述例

以下はデフォルト拒否だけど一部で許可

Order Allow,Deny

Allow from XXX.XXX.XXX.1
Allow from XXX.XXX.XXX.2

Order Allow,Deny

Allow from XXX.XXX.XXX.1
Allow from XXX.XXX.XXX.2
Deny from all


一部拒否の記述例

以下はデフォルト許可だけど一部で拒否

Order Deny,Allow

Deny from XXX.XXX.XXX.1
Deny from XXX.XXX.XXX.2

Order Deny,Allow

Deny from XXX.XXX.XXX.1
Deny from XXX.XXX.XXX.2
Allow from all