htaccess:RewriteEngine On和AuthUserFile冲突

时间:2012-11-05 17:53:37

标签: php .htaccess authentication mod-rewrite

让我们考虑使用以下.htaccess保护文件夹www.mydomain.com/exemple:

的.htaccess

AuthUserFile /root/FTPname/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Restricted Access"
AuthType Basic
require valid-user

我想仅在用户有特定cookie时才允许访问exemple文件夹,或者我引发错误(使用以下[F]标志)。然后我实现了以下代码:

的.htaccess

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !CookieName=CookieValue
RewriteRule .* - [F,L]

AuthUserFile /root/FTPname/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Restricted Access"
AuthType Basic
require valid-user

问题是,当我加载没有cookie的exemple文件夹时,它首先进行验证过程...我想先提出错误。有人知道吗?

1 个答案:

答案 0 :(得分:1)

使用新的环境变量尝试“满足任何”。这里显示了两种技术: .htaccess basic auth by virtual host?一个使用SetEnvIf,另一个使用RewriteRule来设置变量。由于SetEnvIf无法检测到cookie,因此您需要RewriteRule。但我发现在我的共享主机平台上,RewriteRule无法使用“满足任何”。如果它适合你,它将看起来像:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !CookieName=CookieValue
RewriteRule .* - [L,E=DENY:1]

AuthUserFile /root/FTPname/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Restricted Access"
AuthType Basic

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

另请参阅:htaccess exclude one url from Basic Auth

注意您保护的页面不包含图片,样式表等,当页面本身没有时会触发身份验证请求。