首页 > 解决方案 > 这个 Apache 环境变量语法是如何工作的?

问题描述

我已经看到了一堆在 htaccess 中动态设置请求源标头的示例,它们看起来都大致如下:

SetEnvIf Origin "^http(s)?://(.+\.)?(example\.com|example\.org)$" REQUEST_ORIGIN=$0
Header always set Access-Control-Allow-Origin %{REQUEST_ORIGIN}e env=REQUEST_ORIGIN

但是,我似乎无法在任何地方找到第二行语法的解释。我还查看了here,在那里我找到了一个具有类似语法的示例,但同样没有解释它是如何工作的:

https://httpd.apache.org/docs/2.4/env.html

具体来说,我想知道%{REQUEST_ORIGIN}eand env=REQUEST_ORIGIN

这些事情中的每一个都有什么作用?前者似乎正在对变量做一些事情,但大括号语法如何工作以及为什么尾随e

标签: apacheenvironment-variables

解决方案


仅当设置了REQUEST_ORIGIN变量时,第二行才设置 Access-Control-Allow-Origin。

关于%{REQUEST_ORIGIN}e它告诉它需要从环境变量中获取值。

基本上,这两行一起检查有效/安全的来源,如果检查通过,则将 CORS 标头设置为正确的值。

文档

Header 指令后面可以跟一个附加参数,它可以是以下任何一种:

...

env=[!]变量名

当且仅当环境变量 varname 存在时,才会应用该指令。一个 !在 varname 前面反转测试,因此该指令仅在 varname 未设置时适用。

至于e语法:

%{VARNAME}e 环境变量 VARNAME 的内容。

参考:

http://httpd.apache.org/docs/current/mod/mod_headers.html


推荐阅读