4

.htaccess と Apache 2.2 を使用して、テスト サイト/ホストへのアクセスを制御しようとしていますが、運用サイトへのアクセスは制御していません。mod_rewrite を使用してホスト名を検出し、サイトのさまざまな側面を制御するために使用されるいくつかの環境変数を設定していますが、これを利用してアクセスを制御することはできません。mod_setenvif でしかアクセスを制御できません。

ホストを検出し、環境変数を設定できます。(簡略化されています。)

RewriteCond %{HTTP_HOST}                        test\..*
RewriteRule ^ -                                 [ENV=requireAuth:1,ENV=...]

その後、アクセスを制御するためにそれを使用しようとします。

AuthType     Basic
AuthName     "Authentication Required"
AuthUserFile /file/location/.htpasswd

Order        Deny,Allow
Deny         from all
Satisfy      any
Require      valid-user
Allow        from env=!requireAuth

これは動作しません。否定 (!) を削除すると、すべてのサイトに受け入れられないパスワードが強制されます。

mod_setenvif を使用していくつかのバリエーションを試しましたが、requireAuth2 のみが機能します。

SetEnvIf     HOST                               "test.+" requireAuth2
SetEnvIf     requireAuth                        ".+" requireAuth3
SetEnvIf     %{ENV:requireAuth}                 ".+" requireAuth4

phpinfo() を使用してリクエストをダンプすると、requestAuth と requestAuth2 のみが表示されます。

多くの異なるホスト名と多くの異なる環境変数があるため、ホスト チェック ロジックをやり直す必要はありません。また、アクセスをデフォルトにして単一の env=! を持つというアイデアも気に入っています。テスト。アクセスを拒否するのではなく、アクセスを許可するときにエラーが発生します。

助言がありますか?

ありがとう、ウェス。

4

1 に答える 1

2

使用mod_setenv:

SetEnvIfNoCase Host ^test\. requireAuth

AuthType     Basic
AuthName     "Authentication Required"
AuthUserFile /file/location/.htpasswd

Order        Deny,Allow
Deny         from all
Satisfy      any
Require      valid-user
Allow        from env=!requireAuth
于 2014-04-15T21:24:37.570 に答える