Я использую 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
) сделали свое дело.