【发布时间】:2018-08-04 23:49:00
【问题描述】:
我在 Apache 2.4 中有以下 VirtualHost
<VirtualHost example.com:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /dev/null
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
</VirtualHost>
我希望它重定向
http://www.example.com/ -> https://www.example.com/
http://example.com/ -> https://www.example.com/
但是,它会重定向
http://www.example.com/ -> https://www.example.com/
http://example.com/ -> https://example.com/
我不明白...它重定向到 %{HTTP_HOST}。 %{SERVER_NAME} 不应该是 ServerName 吗?这是预期的行为,还是我在其他地方有错误?另外,VirtualHost 语句中的主机名有什么相关性?我还没有找到这方面的信息。谢谢。
【问题讨论】:
-
UseCanonicalName On 可能会有所帮助。
-
谢谢,实际上这很有帮助。但我不确定这是否是真正的解决方案。 UseCanonicalName On 会影响服务器的许多内部处理。在我的情况下,VHost 除了重定向之外什么都不做,但在其他情况下是什么?我仍然对 %{SERVER_NAME} 默认包含 HTTP_HOST 感到震惊。
-
您有一个 serveralias 匹配,使其作为 server_name 有效,这就是原因。如果你只是想重定向到 https www.example.com 它就像
Redirect / https://www.example.com/一样简单 -
忘了说,virtualhost 指令不能与主机名一起使用,只能与 *:port 或 ip:port 一起使用。
标签: apache httpd.conf