Назад | Перейти на главную страницу

.htaccess не запрашивает пароль

Я использую Ubuntu 12.04 и пытаюсь использовать .htaccess на странице с сервером apache2. Мой файл .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>

Я подозреваю, что apache пользователь не умеет читать /home/janeb/.htpasswd. Проверьте журнал ошибок Apache.

Это единственное, что я вижу неправильным в предоставленной конфигурации, но это может быть не единственная проблема; предоставьте полную конфигурацию виртуального хоста. Я также рекомендую переместить конфигурацию аутентификации из .htaccess файл - нет причин для его существования.

РЕДАКТИРОВАТЬ:

Причина .htaccess файл не применяется, потому что AllowOverride All не применяется к пути, где ваш .htaccess файл находится.

В .htaccess файл необходимо применять одновременно с <Directory> блоки - если AllowOverride указано в <Directory ~ ...> блок, тогда это происходит после .htaccess должен был быть применен. Поскольку это не работает, документация специально предостерегает от этого:

AllowOverride действует только в <Directory> разделы указаны без регулярных выражений, а не в <Location>, <DirectoryMatch> или <Files> разделы.

Добавьте новый блок в свою конфигурацию, чтобы разрешить .htaccess файлы, которые будут использоваться:

<Directory /home>
    AllowOverride All
</Directory>

Судя по вашей конфигурации, вам, вероятно, нужно поместить файл .htaccess под /home/janeb/public_html каталог, который является DocumentRoot если я не ошибаюсь.

Что именно вы пытаетесь сделать?

В твоем 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

Я попал сюда с той же проблемой. Оказывается public_html определение наследуется от верхнего уровня сервера (<Directory />), и он содержал AllowOverride None. Изменив это на All (или AuthConfig) сделали свое дело.