Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于环境变量的Apache VirtualHost条件_Apache_Mod Rewrite_Apache2.4 - Fatal编程技术网

基于环境变量的Apache VirtualHost条件

基于环境变量的Apache VirtualHost条件,apache,mod-rewrite,apache2.4,Apache,Mod Rewrite,Apache2.4,基于环境变量的存在,我试图在Apache2.4中包含一个配置文件 在VirtualHost声明中,我将VIEWMODE环境变量设置为: Define virtualhost_config "${virtualhost_path}/conf/virtualhost.conf" <VirtualHost *:80> SetEnv VIEWMODE demo Include "${virtualhost_config}" </VirtualHost&g

基于环境变量的存在,我试图在Apache2.4
中包含一个配置文件

VirtualHost
声明中,我将
VIEWMODE
环境变量设置为:

Define virtualhost_config "${virtualhost_path}/conf/virtualhost.conf"
<VirtualHost *:80>
        SetEnv VIEWMODE demo
        Include "${virtualhost_config}"
</VirtualHost>
Define virtualhost_config“${virtualhost_path}/conf/virtualhost.conf”
SetEnv视图模式演示
包括“${virtualhost_config}”
在包含的配置文件中,我现在在
块中具有以下条件:

<If "env('VIEWMODE') == 'demo'">
    RewriteRule (.*) http://www.apple.com/ [L,R=302]
</If>

重写规则(.*)http://www.apple.com/ [L,R=302]
然而,我似乎无法让这个工作。忽略条件重写规则

我遗漏了什么?

请参阅:

此指令设置的内部环境变量是在运行大多数早期请求处理指令之后设置的,例如访问控制和URI到文件名的映射。如果要设置的环境变量是作为此早期处理阶段的输入,如
RewriteRule
指令,则应改为使用
setenif
设置环境变量

Apache Expresions文档中的函数部分也很有趣:

环境变量排序

当环境变量在<代码> <代码>条件下查找时,重要的是要考虑在请求处理过程中,这种解决方案发生得多么早。作为指导原则,在虚拟主机上下文(目录、位置、htaccess)之外定义的任何指令都不可能有机会执行<虚拟主机作用域中的code>setenif是在此解析之前运行的一条指令

当在
之外使用
reqenv
时,解析通常会在稍后出现,但确切的时间取决于表达式所使用的指令

因此,您需要使用,因为
SetEnv
处理得不够快,这在我测试时为我修复了它。比如:

Define virtualhost_config "${virtualhost_path}/conf/virtualhost.conf"
<VirtualHost *:80>
        SetEnvIf Request_URI ^ VIEWMODE=demo
        Include "${virtualhost_config}"
</VirtualHost>
Define virtualhost_config“${virtualhost_path}/conf/virtualhost.conf”
SetEnvIf请求_URI^VIEWMODE=demo
包括“${virtualhost_config}”
请参阅:

此指令设置的内部环境变量是在运行大多数早期请求处理指令之后设置的,例如访问控制和URI到文件名的映射。如果要设置的环境变量是作为此早期处理阶段的输入,如
RewriteRule
指令,则应改为使用
setenif
设置环境变量

Apache Expresions文档中的函数部分也很有趣:

环境变量排序

当环境变量在<代码> <代码>条件下查找时,重要的是要考虑在请求处理过程中,这种解决方案发生得多么早。作为指导原则,在虚拟主机上下文(目录、位置、htaccess)之外定义的任何指令都不可能有机会执行<虚拟主机作用域中的code>setenif是在此解析之前运行的一条指令

当在
之外使用
reqenv
时,解析通常会在稍后出现,但确切的时间取决于表达式所使用的指令

因此,您需要使用,因为
SetEnv
处理得不够快,这在我测试时为我修复了它。比如:

Define virtualhost_config "${virtualhost_path}/conf/virtualhost.conf"
<VirtualHost *:80>
        SetEnvIf Request_URI ^ VIEWMODE=demo
        Include "${virtualhost_config}"
</VirtualHost>
Define virtualhost_config“${virtualhost_path}/conf/virtualhost.conf”
SetEnvIf请求_URI^VIEWMODE=demo
包括“${virtualhost_config}”

我通过设置一个Apache变量解决了这个问题,该变量随后向
SetEnv
指令和
块提供数据。不幸的是,
块本身似乎会导致其内部指令的处理顺序出现问题(例如,
此处不允许使用ServerAlias
),但
没有这个问题(使用
仅对我有效,因为
视图模式
是二进制的)。最终的解决方案如下所示:

Define environment production
Define viewmode demo

<VirtualHost *:80>
    SetEnv ENVIRONMENT ${environment}
    <IfDefine viewmode>
        SetEnv VIEWMODE ${viewmode}
        Include "${virtualhost_path}/conf/demo-configuration.conf"
    </IfDefine>
</VirtualHost>

UnDefine environment
UnDefine viewmode
定义生产环境
定义视图模式演示
SetEnv环境${ENVIRONMENT}
SetEnv VIEWMODE${VIEWMODE}
包括“${virtualhost_path}/conf/demo configuration.conf”
未定义环境
取消定义视图模式

一个重要的警告是,Apache变量是全局变量,因此如果在后续虚拟主机中可能使用相同的变量,请确保在每个配置结束时取消定义它们。

我通过设置一个Apache变量解决了这一问题,该变量随后向
SetEnv
指令和
块提供数据。不幸的是,
块本身似乎会导致其内部指令的处理顺序出现问题(例如,
此处不允许使用ServerAlias
),但
没有这个问题(使用
仅对我有效,因为
视图模式
是二进制的)。最终的解决方案如下所示:

Define environment production
Define viewmode demo

<VirtualHost *:80>
    SetEnv ENVIRONMENT ${environment}
    <IfDefine viewmode>
        SetEnv VIEWMODE ${viewmode}
        Include "${virtualhost_path}/conf/demo-configuration.conf"
    </IfDefine>
</VirtualHost>

UnDefine environment
UnDefine viewmode
定义生产环境
定义视图模式演示
SetEnv环境${ENVIRONMENT}
SetEnv VIEWMODE${VIEWMODE}
包括“${virtualhost_path}/conf/demo configuration.conf”
未定义环境
取消定义视图模式
一个重要的警告是,Apache变量是全局变量,因此如果在后续虚拟主机中可能使用相同的变量,请确保在每个配置的末尾
取消定义
这些变量。

使用
重定向302”http://www.apple.com/“
内的
如果
,否则,如果没有
RewriteEngine在那里,我不确定它是否可以工作。使用
Redirect 302“http://www.apple.com/“
If
中,否则我不确定它在没有
重写引擎的情况下是否能工作