Apache2:单独的“配置树”的基于条件的包含

Posted

技术标签:

【中文标题】Apache2:单独的“配置树”的基于条件的包含【英文标题】:Apache2: Conditional Based Include for Separate "Configuration Tree" 【发布时间】:2016-09-18 18:04:18 【问题描述】:

我想模仿在 Linux 上启用站点的行为,但在 Windows 上使用 Xampp,我遇到了一些问题。我希望有人可以提供帮助。

在 Linux 上,可以将 phpINIDIR 指令放在特定的虚拟主机定义中,并使该值仅用于虚拟主机。这似乎可行,因为虚拟主机是不同的“配置树”,因此每个虚拟主机都可以有自己的 PHPINIDIR。

在默认的 Xampp 安装中有一个 conf/extra/httpd-vhosts.conf,我可以在其中添加我自己的虚拟主机定义,但这些都是一起加载的。因此它是“一个配置树”,当我尝试在每个不同的 vhost 定义中放置不同的 PHPINIDIR 指令时它会出错(因为该变量被视为多次定义)。

我一直在阅读有关 mod_vhost_alias 的文章,看看我是否可以进行条件包含。

例如根据主机名检查文件是否存在,如果存在则加载配置文件。如果没有,请加载一个默认值。

<IfModule vhost_alias_module>
  <If "-f 'C:/dev/bin/xampp/apache/conf/vhosts/' . %0 . '/vhost.conf'">
    Include "'C:/dev/bin/xampp/apache/conf/vhosts/' . %0 . '/vhost.conf'"
  </If>
  <Else>
    Include "C:/dev/bin/apache/conf/vhosts/default.conf"
  </Else>
</IfModule>

我不知道我的语法是否只是错误,或者 vhost_alias_module 是否仅适用于虚拟主机指令来设置变量,但在任何一种情况下都会出现上述错误:

httpd: Syntax error on line 503 of C:/dev/bin/xampp/apache/conf/httpd.conf: Syntax error on line 43 of C:/dev/bin/xampp/apache/conf/extra/httpd-vhosts.conf: Invalid Include path 'C:/dev/bin/xampp/apache/conf/vhosts/' . %0 . '/vhost.conf'

我不赞成这个特定的解决方案,我愿意接受建议。但是,我希望每个主机都有一个完整的唯一 vhost.conf 文件,因为我希望能够自定义的不仅仅是 PHPINIDIR。

【问题讨论】:

这有帮助吗? change php values per vhost 实际上,是的,这绝对可以帮助解决我的问题。 【参考方案1】:

没有任何类似的东西会起作用。

配置文件名是无关紧要的,不管你在 N 个文件中有 1 个虚拟主机还是在 1 个文件中有 N 个虚拟主机都没有关系。可以在虚拟主机中指定指令,也可以不指定。

至于为什么你的方案不起作用:

mod_vhost_alias 的 %n 变量不适用于任何 Apache 其他指令,只有 mod_vhost_alias 提供的那些。

此外, 以及与 mod_vhost_alias 相关的任何内容都在请求处理时进行解释,而 Include 在读取配置文件时进行处理。

【讨论】:

【参考方案2】:

Invalid Include path 对我来说,这看起来像是寡妇下的格式错误的路径: 不应该是……。比如C:\\dev\\bin\\...C:\dev\bin\... 取决于软件如何处理反斜杠?

【讨论】:

以上是关于Apache2:单独的“配置树”的基于条件的包含的主要内容,如果未能解决你的问题,请参考以下文章

Google表格按2个单独条件过滤

Apache2.4之httpd.conf配置详解

使用 python、pandas 合并 2 个基于 3 个条件的单独 excel 文件

如何根据 mod_userdir 的用户拥有单独的 Apache2 日志文件?

每个单独行的条件格式公式?

电子表格 - 基于其他单元格的条件格式单元格