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

Путь AuthUserFile относительно корня виртуального хоста?

Учитывая эту структуру папок / файлов:

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

должно сработать.