我需要使用.htaccess文件来密码保护我的网站上查询字符串包含“fn = ass”的所有网址。例如,此URL应受到保护:
http://www.example.com/?foo=123&fn=ass&bar=456
我在Win7开发工作站上运行(使用Apache 2.4.10运行XAMPP 1.8.4)。
但是,我在Media Temple(运行Apache 2.4.7)的Ubuntu 14.04 VPS上尝试了完全相同的.htaccess指令,并且它无法正常工作。
我可以看到Apache正在匹配正确的URL,因此该部分正在运行 - 但浏览器不会提示我输入密码。我尝试加载这些URL时只收到401 Unauthorized错误。 Apache错误说:
“此服务器无法验证您是否有权访问所请求的文档。您提供了错误的凭据(例如,密码错误),或者您的浏览器不了解如何提供所需的凭据。”
这是我完整的.htaccess文件(轻微编辑)。 (忽略WordPress的东西;相关的部分是< IfModule&gt ;.)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
##
# Password-protect assessment result URLs
##
<IfModule mod_rewrite.c>
RewriteEngine On
# First, set an environment variable to true if the current URL is a request
# for an assessment results page.
# We can't use SetEnvIf for this, because it can't examine the querystring.
RewriteCond %{QUERY_STRING} fn=ass
RewriteRule .* - [E=require_auth:true]
# Configure HTTP-Auth
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/vhosts/example.com/mysite.htpasswd
# Satisfy the request if the "callcenter" user is logged in, OR if
# require_auth is untrue
Order Deny,Allow
Deny from all
Satisfy any
Require user callcenter
Allow from env=!require_auth
</IfModule>
我已经尝试/检查/排除的事情:
文件/var/www/vhosts/example.com/mysite.htpasswd确实存在,可读,并且包含名为callcenter的用户的条目。但是,这似乎没有什么区别 - 如果我将此路径更改为不存在的文件,或者甚至完全注释掉AuthUserFile行,则行为保持不变。
此vhost的.conf文件确实将“AllowOverride All”授予该站点的webroot目录。
我尝试重启Apache(对于.htaccess文件来说不应该这样 - 但我试过了。)
将“需要用户呼叫中心”更改为“需要有效用户”无济于事。
有什么想法吗?奇怪的是,它适用于XAMPP,但不适用于Media Temple服务器。
早些时候,我已经整个网站受密码保护,并且工作正常 - 虽然这是在.conf文件中完成的,而不是.htaccess,并且是一个更简单的案例(只是一些)在&lt; Directory&gt;指令内隐藏的行,没有条件)。 (这些行当前是从.conf文件中注释掉的,因此它们不应该干扰我在.htaccess文件中尝试做的事情。)