我正在尝试保护包含特定字符串的网址:
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
不记录任何内容。
有什么建议吗? :)
答案 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中工作。