Путь AuthUserFile относительно корня виртуального хоста?
Учитывая эту структуру папок / файлов:
private/.htpasswd
public/.htaccess
... где public
корневая папка виртуального хоста в Apache, и private
это его родная папка:
Как определить относительный путь для AuthUserFile
в .htaccess
файл, так что он может получить доступ /private/.htpasswd
Я пробовал:
AuthType Basic
AuthUserFile ../private/.htpasswd
require valid-user
Но это не работает, потому что он пытается найти файл относительно ServerRoot вместо корня виртуального хоста.
У меня не будет доступа к файлу конфигурации на производственном сервере (общий хост), и я не хочу определять абсолютный путь, потому что структура моей тестовой и производственной файловой системы не совпадает.
Можно ли все еще добиться того, чего я хочу, учитывая эти условия?
4 ответа
Давайте возьмем пример.
Ваше приложение находится в /var/www/myApp на каком-нибудь сервере Linux
.htaccess: /var/www/myApp/.htaccess
htpasswdApp: /var/www/myApp / htpasswdApp. (Вы можете использовать любое имя для файла .htpasswd)
Чтобы использовать относительный путь в .htaccess:
AuthType Digest
AuthName myApp
AuthUserFile "htpasswdApp"
Require valid-user
Но он будет искать файл в каталоге server_root. Не в document_root.
В нашем случае, когда приложение находится в /var/www/myApp:
корень документа is /var/www/myApp
server_root - это / etc / apache2 // (только в нашем примере, потому что мы используем сервер Linux)
Вы можете переопределить его в своем конфигурационном файле apache (/etc/apache2/apache2.conf), но я думаю, что это плохая идея.
Поэтому, чтобы использовать относительный путь к файлу в вашем /var/www/myApp/.htaccess, вы должны определить файл пароля в вашем server_root.
Я предпочитаю делать это с помощью следующей команды:
sudo ln -s /var/www/myApp/htpasswdApp /etc/apache2/htpasswdApp
Вы можете скопировать мою команду, использовать жесткую ссылку вместо символа или скопировать файл на ваш server_root.
Если решение символической ссылки, опубликованное Селивановым Павлом, не работает, вы можете отключить директивы Auth* в.htaccess, используя ALlowOverride -AuthConfig
(или вообще отключите.htaccess) и переместите конфигурацию Auth в конфигурацию Apache только на локальном компьютере.
Вы можете использовать символическую ссылку в системе тестирования, например /srv/www/vhost/private/.htpasswd -> /var/www/vhost/private/.htpasswd
, Первый путь должен быть таким же, как на рабочем сервере. Тогда вы сможете использовать одинаковые пути на обоих серверах. Options FollowSymLinks
может потребоваться для этого. Я не вижу способа включить файлы конфигурации не относительно ServerRoot.
Без ведущего /
затем путь к AuthUserFile
относительно ServerRoot
, Ваш личный каталог будет иметь путь относительно ServerRoot, поэтому просто укажите, что
ServerRoot /var/www
и справочник провата в
/var/www/some/path/private
затем
AuthUserFile some/path/private
должно сработать.