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

Как я могу использовать SetEnvIf для установки переменной на основе хоста Http?

Я пытаюсь установить переменную на Apache

ENV = DEV, если http-хост - это URL-адрес разработчика

или

ENV = PRD, если http-хост является URL-адресом prd

а затем используйте $ _SERVER ['ENV'], чтобы создать несколько логических ветвей

Пока ни один из них у меня не работал, и у нас установлен модуль setenvif.

SetEnvIfNoCase Referer
SetEnvIfNoCase Remote_Host

Как правильно это сделать?

Беглый взгляд на документация:

Директива SetEnvIf определяет переменные среды на основе атрибутов запроса. Атрибут, указанный в первом аргументе, может быть одним из трех:

Поле заголовка HTTP-запроса (дополнительную информацию см. В RFC2616); например: Host, User-Agent, Referer и Accept-Language. Регулярное выражение может использоваться для указания набора заголовков запроса.

Итак, безусловно, можно сделать переменную среды условной для Host заголовок. Похоже, вы пытаетесь использовать Referer или Remote_Host заголовки, ни один из которых не совсем то, что вам нужно (хотя теоретически Referer должен содержать значение Host заголовок в большинстве случаев). Remote_Host будет именем хоста клиент выполнение запроса, что совсем не то, что вы хотите (и в большинстве конфигураций будет просто недоступно, так как поиск DNS обычно отключен по соображениям производительности).

Попробуйте что-то вроде этого:

SetEnvIf Host "www-dev\.example\.com" ENV=DEV
SetEnvIf Host "www-production\.example\.com" ENV=PRD

... а затем используйте $ _SERVER ['ENV'], чтобы создать несколько логических ветвей

Но обратите внимание, что вы можете просто сослаться на значение Host заголовок прямо в PHP, не прибегая к этой уловке; $_SERVER['HTTP_HOST'] будет именно то, что вы хотите.