使用基于query_string的基本身份验证

时间:2012-07-28 10:06:26

标签: apache mod-rewrite basic-authentication

我正在尝试保护包含特定字符串的网址:

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

不记录任何内容。

有什么建议吗? :)

3 个答案:

答案 0 :(得分:2)

为了增加Jon的答案,我遇到了与OP类似的问题。但是我发现allow from env=!NEED_AUTH没有工作,所以我必须在重写条件RewriteCond %{QUERY_STRING} !format=foo中反转它,然后反转允许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

答案 1 :(得分: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

答案 2 :(得分:0)

如此处所述(Apache permissions based on querystring),我无法得到" RewriteRule"和#34;允许来自env"在Apache 2.4.6中工作。