CentOS 上的 Apache2 环境变量

CentOS 上的 Apache2 环境变量

我正在尝试在 Apache2 httpd.conf 中使用环境变量。目的是将端口 80 重定向到同一主机上的 https 连接并留在那里。

我需要它来获取 HOSTNAME 或 HTTP_HOST,因为我之前不知道它。使用重定向或 mod_rewrite 不是真正的问题。

问题是,我甚至无法输出任何这些变量。当我添加 %{HOSTNAME} 或 %{HTTP_HOST} 然后浏览到http://example.com/ 它会重定向到https://%{主机名}

我正在使用 CentOS,可能遗漏了一些非常重要的东西。任何帮助都将不胜感激。

编辑1: 列出环境变量我可以看到 HOSTNAME 已定义,但是 HTTP_HOST 不存在。

疑问A:如果我定义HTTP_HOST,我应该给它什么值?因为我需要它在当前HTTP Host改变时输出它。

疑问 B:如文档和其他答案中所述,httpd.conf 中此变量的正确语法应为(例如)%{HTTP_HOST}%{REQUEST_URI} 我确实以这种方式使用它,并尝试使用 HOSTNAME,希望它输出值而不是字面上的“%{HOSTNAME}”。如果我定义了这个,为什么它不输出值?

编辑2 解决了:事实证明 HTTP_HOST 由于这个原因无法正常工作:https://stackoverflow.com/questions/10910541/is-the-http-host-server-variable-always-defined

由于我使用的是 IP 地址,所以我仍然不知道 HTTP_HOST 是什么。

答案1

您确定 HTTP_HOST 已定义吗?

请记住,这些是 shell 变量,与你在 .htaccess 中使用的不同

如果 apache 找不到您指定的环境变量,它将保留原样的文本。

可以使用语法 ${ENVVAR} 在配置文件行中使用 shell 环境变量的值。如果“ENVVAR”是有效环境变量的名称,则该变量的值将替换到配置文件行中的相应位置,并继续处理,就像在配置文件中直接找到该文本一样。(如果未找到 ENVVAR 变量,则字符“${ENVVAR}”保持不变,以供配置文件处理的后续阶段使用。)

http://httpd.apache.org/docs/2.2/configuring.html

我建议使用 mod_rewrite 来完成这项工作,因为它做得相当好。

相关内容