我正在尝试在 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 来完成这项工作,因为它做得相当好。