Переменная .htaccess AuthUserFile в зависимости от среды

Я пытаюсь загрузить файл .htpasswd в зависимости от среды. Если я жестко закодирую URL, он будет работать нормально.

AuthType Basic
AuthName "Password Protected"AuthUserFile /var/www/html/sitename.dev/docroot/.htpasswd
Require valid-user

Наш хостинг провайдер обеспечение глобальная переменная, которую вы можете использовать в htaccess.

%{ENV:AH_SITE_ENVIRONMENT} Хостинг Acquia — возможные значения dev, test, или же prod

Используя переменную, мы можем проверить, в какой среде мы на данный момент. При необходимости это также можно проверить с помощью следующего правила: SetEnvIf Host ^dev\. DEV но я хотел бы предотвратить это.

Я хотел использовать IfDefine, но ifdefine не читает глобальные переменные. Можно ли сделать одно из следующего?

  1. Сделайте путь переменной и сохраните путь с AH_SITE_ENVIRONMENT переменная, а затем сделать что-то вроде этого: AuthUserFile MyConfiguredPathVar
  2. Поместите переменную в AuthUserFile напрямую, чтобы конкатить так AuthUserFile /var/www/html/sitename.%{ENV:AH_SITE_ENVIRONMENT}/docroot/.htpasswd
  3. Любой другой способ использовать ifdefine и проверить, если AH_SITE_ENVIRONMENT = dev

Apache версия 2.2.22

ОБНОВЛЕНИЕ 1: Можно проверить env с RewiteCond

# Determine whether environment is production:
RewriteCond %{ENV:AH_SITE_ENVIRONMENT} !prod

1

Решение

Проблема здесь в том, что модули авторизации не имеют доступа к переменным ENV из-за их загрузки до mod_env а также setenvif_module модули. Это означает, что директивы SetEnv и SetEnvIf не работают во время аутентификации, а переменные еще не установлены.

Вы можете проверить порядок загрузки модуля по
httpd -M

0

Другие решения

Других решений пока нет …