这是我的代码(我注释掉了 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本来是你的选择。由于宏在服务器启动时进行评估,并根据它们构建静态配置,因此它比在请求时比较变量更有效。