这个Apache环境变量语法如何工作?

时间:2019-05-15 16:34:10

标签: apache environment-variables

我已经看到了一堆用于在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

但是,我似乎在任何地方都找不到第二行语法的解释。我还看过这里,发现了一个语法相似的示例,但又没有任何解释它的工作原理:

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

具体来说,我想了解%{REQUEST_ORIGIN}eenv=REQUEST_ORIGIN

这些东西各自做什么?前者似乎正在对变量进行处理,但是括号语法如何工作以及为什么尾随e会如此?

1 个答案:

答案 0 :(得分:1)

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

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

基本上,这两行共同检查有效/安全的来源,并在检查通过时将CORS标头设置为适当的值。

文档

  

Header指令后可以跟一个附加参数,该参数可以是以下任意一个:

     

...

     

env = [!] varname

     

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

关于e语法:

  

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

参考文献:

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