Кратко рассмотрим документацию :
Директива 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']
будет иметь именно то, что вы хотите.
SetEnvIf
документах говорится, что третий параметр является регулярным выражением. Разве точки в доменном имени не должны быть экранированы обратной косой чертой? Или кавычка в двойных кавычках заставляет Apache рассматривать его как строковый литерал?"www-dev.example.com"
регулярное выражение также будет соответствовать неожиданным именам хостов, таким какwww-dev-example.com
. Вы получите ожидаемые совпадения и многое другое. Я обновил пример сейчас.