.htaccess 不询问密码

.htaccess 不询问密码

我正在使用 Ubuntu 12.04,并尝试在带有 apache2 服务器的页面上使用 .htaccess。我的 .htaccess 文件如下所示:

AuthType Basic
AuthName "Password Required"
AuthBasicProvider file
AuthUserFile /home/janeb/.htpasswd
require valid-user

/home/janeb/.htpasswd 文件是:

inb351:$apr1$Ya4tzYvr$KCs3eyK1O2/c7Q9zRcwn..

并且 /etc/apache2/sites-available/default 文件是:

UserDir public_html
<Directory ~ "public_html/.*">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all  
</Directory>

我重启了 apache。我尝试过改成require valid-userrequire user inb351还是没成功。我也试过AllowOverrideAuthConfigAuthConfig Indexes所以我不知道还能做什么,是的,我试过的每一步我都重启了 apache。

编辑:确切的默认文件是:

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
    UserDir disabled vmuser
    UserDir public_html
<Directory ~ "public_html/*">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

答案1

我怀疑apache用户没有读取的能力/home/janeb/.htpasswd。检查 Apache 的错误日志。

这是我在提供的配置中看到的唯一错误,但这可能不是唯一的问题;请提供您的完整虚拟主机配置。我还建议您将身份验证配置移出文件.htaccess- 它没有理由留在那里。

编辑

.htaccess文件未被应用的原因是因为AllowOverride All它未被应用到.htaccess文件所在的路径。

.htaccess文件需要与块同时应用<Directory>- 如果在块AllowOverride中指定,<Directory ~ ...>则会发生这种情况 .htaccess应该应用。由于这不起作用,文档中明确警告了这一点

<Directory>AllowOverride 仅在未使用正则表达式指定的部分中有效,在<Location><DirectoryMatch><Files>部分中无效。

向您的配置中添加一个新块以允许.htaccess使用您的文件:

<Directory /home>
    AllowOverride All
</Directory>

答案2

根据您的配置,您可能需要将 .htaccess 文件放在目录下,/home/janeb/public_html如果DocumentRoot我没记错的话。

答案3

您到底想做什么?

在您的vhost声明中...

order allow,deny
allow from all  

您已经声明每个人都应该有访问权限...这意味着您的关注.htpasswd无关紧要,因为它具有优先权。

相反,删除该代码,您所.htaccess需要的只是......

AuthType Basic
AuthName "Password Required"
AuthUserFile /home/janeb/.htpasswd
Require valid-user

.htpasswd文件可以位于服务器上的任何位置,只要 Apache 可以读取它即可(通常是 www-data)。

如果你想把IP限制和.htpasswd限制结合起来,那么你也可以使用..

order deny,allow
deny from all
allow from 192.168.0.10

AuthType Basic
AuthName "Password Required"
AuthUserFile /home/janeb/.htpasswd
Require valid-user

Satisfy Any

答案4

我遇到了同样的问题。原来public_html定义继承自服务器的顶级 ( <Directory />) 设置,并且它包含AllowOverride None。将其更改为All(或AuthConfig) 即可解决问题。

相关内容