如何在 Apache 配置中的 If-Else 语句中使用自定义变量?

如何在 Apache 配置中的 If-Else 语句中使用自定义变量?

这是我的代码(我注释掉了 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

我尝试过这些比较

  • “${host_domain} == 'main'”

    AH00526:/etc/httpd/conf.d/stage_template.vhost 第 9 行语法错误:无法解析条件子句:语法错误,意外的 T_OP_STR_EQ,预期为“(”

  • “%{host_domain} =='main'”

    AH00526:/etc/httpd/conf.d/stage_template.vhost 第 9 行语法错误:无法解析条件子句:‘%’附近解析错误

  • “'${host_domain}' == 'main'”

    AH00526:/etc/httpd/conf.d/available_vhosts/stage_template.vhost 第 10 行语法错误:此处不允许使用 ServerAlias

我用的是这个作为指南。但是它没有任何使用自定义变量的示例。

谢谢!

答案1

阿帕奇的如果别的语句在请求时进行评估,而虚拟主机匹配有自己的逻辑。这就是为什么 If-Else 可能ServerAlias根本无法使用,或者会产生意想不到的结果。另一方面,您声明“${host_domain}可以有 3 个可能的值”。您尝试做的事情过于复杂,您有几种更好的方法。

  • <VirtualHost>每个单独使用主要的职员顾客
  • 将所有这些虚拟主机添加到单个<VirtualHost>,每个选项都与单个匹配ServerAlias。然后,您可以在其中使用 If-Else 语句<VirtualHost>根据%{HTTP_HOST}变量更改特定配置。
  • 如果有几个类似的<VirtualHost>(远不止三个),配置中只有某些部分发生变化,Apache 模块mod_macro本来是你的选择。由于宏在服务器启动时进行评估,并根据它们构建静态配置,因此它比在请求时比较变量更有效。

相关内容