我正在使用 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-user
。require user inb351
还是没成功。我也试过AllowOverride
和AuthConfig
。AuthConfig 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
) 即可解决问题。