apache - 这个 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}e
and env=REQUEST_ORIGIN
。
这些事情中的每一个都有什么作用?前者似乎正在对变量做一些事情,但大括号语法如何工作以及为什么尾随e
?
解决方案
仅当设置了REQUEST_ORIGIN变量时,第二行才设置 Access-Control-Allow-Origin。
关于%{REQUEST_ORIGIN}e
它告诉它需要从环境变量中获取值。
基本上,这两行一起检查有效/安全的来源,如果检查通过,则将 CORS 标头设置为正确的值。
文档
Header 指令后面可以跟一个附加参数,它可以是以下任何一种:
...
env=[!]变量名
当且仅当环境变量 varname 存在时,才会应用该指令。一个 !在 varname 前面反转测试,因此该指令仅在 varname 未设置时适用。
至于e
语法:
%{VARNAME}e 环境变量 VARNAME 的内容。
参考:
推荐阅读
- html - 如何在不弄乱滚动条的情况下使用溢出滚动制作圆角?
- javascript - 如何仅使用 Enter/press 触发 Typeahead?
- vb.net - 是否可以对多个图片框进行分组?
- c# - 如何在 c# 中创建一个长度为 64 位无符号整数的列表?
- firebase - 在飞镖中返回一个整数
- python - 使用斜纹从登录页面 Python 抓取 .txt
- java - 当我将项目发送给任何人时,如何自动添加外部 Java 库?
- windows - 试图创建一个批处理文件来移动和替换 desktop.ini 但它说找不到文件
- php - 找不到要渲染的模板
- c# - 扩展控制器构造函数没有用户实例