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. *)