作者: Zazel
日時: 2007/2/22(00:27)
Zazelです。

=== davi <davi-1984@...> さんが書かれた
=== <20070221182814.4EAF.DAVI-1984@...> にて

> とありますが、<Files>同士の場合は、<Files ~ "^\.ht">の定義が
> <Files *>よりも後に解釈されると考えて良いような気もします。
> 実際は、どうなんでしょう?
> 
> というのも、コメントアウトしたB部分を生かすと、deny指定と
> 関係ない127.0.0.1からアクセスしても、AのAllow from allを
> パスした後、Bの所でパスワード入力画面に行ってしまうんですよね。

ここが勘違いのもとだと思います。

簡単にいえば .htaccess を読みながらallowとdenyの一覧を作成する。
ファイルを最後まで読んで一覧が完成してから最後に表れたOrderに
書かれた順に従ってallowとdenyを評価します。

だから例えばBの部分が有効の時に.ht*以外だと評価されるのは

    Satisfy any
    Order Allow,Deny
    Allow from all
    deny from 255.255.255.255
    Satisfy All
    Order Deny,Allow
    deny from 192.168.0.1

となってOrder Deny,Allow で Allow from all なので、全てのホストが
通過の設定になります。


> <Files *>だけ、内容を分割して、下位ディレクトリに別置して
> 上書きルールをだます方法を考えてみたのですが、上手い案が
> 思いつきません。
> 
> ラベルを付けてジャンプする機能とか、Aの方でAllowされた
> アクセスに環境変数を付けて、Aの方でSetEnvIfとかで
> 明示的にAllowするとかできないかと、半日ほど抜け道を探して
> みたのですが、そんな便利そうなの、なさそうでしょうか?

飛び道具な案でよければありますが。(^_^;)

[ auth/.htaccess ]
    認証絡みの設定をここへ...
    Order Deny,Allow
    Deny from all
    Allow from ※認証ありで通したいホスト

[ auth/contents/ ]
    コンテンツ置場

[ noauth/.htaccess ]
    Options +FollowSymLinks
    Order Deny,Allow
    Deny from all
    Allow from ※認証なしで通したいホスト

[ noauth/contents/ ]
    auth/contentsへシンボリックリンク

<FilesMatch "^\.ht">が必要ならば、.htaccessの最後に
    Order Allow,Deny
    Deny from all
を追加する。

認証ありなしでURLが変わるのがまずかったらRewriteRuleで。


# 本質的には仕様を見直した方がいいと思います。(笑)

(* SEKI Masatoshi  //  Zazel                      *)
(*  Would you hold my hand? Softly, let's linger. *)