Путь 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

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

Другие вопросы по тегам