0

特定の文字列を含む URL を保護しようとしています:

RewriteCond %{QUERY_STRING} foo
RewriteRule - [E=NEED_AUTH:1]
Options -Indexes
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
Order allow,deny
allow from all
satisfy any
deny from env=NEED_AUTH
Require valid-user

これにより、ロード時に認証ダイアログが表示されるはずです

index.php?format=foo

しかし、うまくいきません。たとえば、他のいくつかの RewriteConds を試しました

RewriteCond %{QUERY_STRING} format=foo
RewriteCond %{QUERY_STRING} ^format=foo$

運がない。使用する

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

何も記録しません。

助言がありますか?:)

4

3 に答える 3

2

Jonの答えに追加するために、OPと同様の問題がありました。しかし、それが機能してallow from env=!NEED_AUTHいないことがわかったので、 Rewrite ConditionRewriteCond %{QUERY_STRING} !format=foo でそれを元に戻し、次に allow を元に戻す必要がありましたallow from env=NEED_AUTH。したがって、これが機能するスニペットです。

RewriteCond %{QUERY_STRING} !foo=bar
RewriteRule ^ - [E=NO_AUTH:1]

Order deny,allow
Deny from all
AuthType basic
AuthName "Auth Needed"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require valid-user
Allow from           env=NO_AUTH
Satisfy              Any
于 2012-09-05T18:58:44.867 に答える
0

を使用して書き換えエンジンがオンになっていることを確認してくださいRewriteEngine On。また、RewriteRuleにエラーがあります。

RewriteRule - [E=NEED_AUTH:1]

フラグの前に2つのパラメータが必要です。

RewriteRule ^ - [E=NEED_AUTH:1]

それを除けば、認証を正しく設定したようには見えません。レルムを定義する必要がありますAuthName。Apacheはそれなしでは認証を行いません。そして、私はあなたが認証を強制することができないと思いますallow from all、あなたはすべてを拒否することによって、これを逆に行う必要があるかもしれませんそしてallow from env=!NEED_AUTH

于 2012-07-28T23:04:34.617 に答える
0

here (クエリ文字列に基づく Apache のアクセス許可) で説明されているように、Apache 2.4.6 で動作する "RewriteRule" と "Allow from env" の組み合わせを取得できません。

于 2014-02-05T01:06:18.487 に答える