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

Как использовать настраиваемую переменную в операторе If-Else внутри конфигурации Apache?

Вот мой код (я закомментировал часть if-else, так как она не работает)

фрагменты / содержимое моих файлов конфигурации

/etc/httpd/conf.d/staff.vhost

Define host_domain "staff"

Include /etc/httpd/conf.d/stage_template.vhost

/etc/httpd/conf.d/stage_template.vhost

    #<If "${host_domain} == 'main'">
    #    ServerAlias stage.myhost.com
    #</If>
    #<Else>
        ServerAlias stage-${host_domain}.myhost.com
    #</Else>

$ {host_domain} может иметь 3 возможных значения: main, staff или customer.

Я пробовал эти сравнения

Я использовал это страница как руководство. Но у него нет примеров использования пользовательских переменных.

Спасибо!

Apache's Если еще операторы оцениваются во время запроса, а Сопоставление виртуального хоста есть своя логика. Вот почему вполне вероятно, что If-Else не будет работать с ServerAlias вообще, иначе это дало бы неожиданные результаты. С другой стороны, вы заявляете, что ваш "${host_domain} может иметь 3 возможных значения ". То, что вы пытаетесь сделать, слишком сложно, и у вас есть несколько подходов получше.

  • Используйте отдельные <VirtualHost> для каждого основной, штат сотрудников и клиент.
  • Добавьте все эти виртуальные хосты в один <VirtualHost> где каждый вариант соответствует одному ServerAlias. Затем вы можете использовать операторы If-Else внутри <VirtualHost> для изменения конкретной конфигурации на основе %{HTTP_HOST} переменная.
  • Если бы было несколько похожих <VirtualHost>s (намного больше, чем три) с некоторыми изменяющимися частями в конфигурации, модуль Apache mod_macro был бы ваш выбор. Поскольку макросы оцениваются при запуске сервера, создавая из них статическую конфигурацию, это более эффективно, чем сравнение переменных во время запроса.