Учитывая эту структуру папок / файлов:
private/.htpasswd
public/.htaccess
... где public
это корневая папка виртуальный хост в Apache и private
это его родственная папка:
Как определить относительный путь для AuthUserFile
в .htaccess
файл, чтобы он мог получить доступ /private/.htpasswd
Я пробовал:
AuthType Basic
AuthUserFile ../private/.htpasswd
require valid-user
Но это не работает, потому что он пытается найти файл относительно ServerRoot, а не относительно корня виртуального хоста.
У меня не будет доступа к файлу конфигурации на производственном сервере (общий хост), и я не хочу определять абсолютный путь, потому что мои тестовые и производственные структуры файловой системы не совпадают.
Могу ли я достичь желаемого в этих условиях?
Возьмем пример.
Ваше приложение находится в / 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 :
document_root является / var / www / myApp
server_root является / и т.д. / 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
должно сработать.