Я пытаюсь загрузить файл .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 не читает глобальные переменные. Можно ли сделать одно из следующего?
AH_SITE_ENVIRONMENT
переменная, а затем сделать что-то вроде этого: AuthUserFile MyConfiguredPathVar
AuthUserFile /var/www/html/sitename.%{ENV:AH_SITE_ENVIRONMENT}/docroot/.htpasswd
AH_SITE_ENVIRONMENT = dev
Apache версия 2.2.22
ОБНОВЛЕНИЕ 1: Можно проверить env с RewiteCond
# Determine whether environment is production:
RewriteCond %{ENV:AH_SITE_ENVIRONMENT} !prod
Проблема здесь в том, что модули авторизации не имеют доступа к переменным ENV из-за их загрузки до mod_env
а также setenvif_module
модули. Это означает, что директивы SetEnv и SetEnvIf не работают во время аутентификации, а переменные еще не установлены.
Вы можете проверить порядок загрузки модуля по
httpd -M
Других решений пока нет …