通过.htaccess文件进行密码保护:在一台服务器上运行;拒绝访问而不要求另一个人输入密码

时间:2015-01-19 19:02:21

标签: apache .htaccess http-authentication

我需要使用.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文件中尝试做的事情。)

0 个答案:

没有答案