我正在修复服务器上的Apache(2.4.12)配置文件,该服务器提供三个不同的域名。我为每个站点都有一个不同的配置文件。我不能为我的生活弄清楚如何完成以下两个方面:
http
次请求重定向到https
,保持请求的其余部分(子域/主机和文档路径)完全相同www
次请求重定向到非www
我已经读过,如果我只有一个*:80
VirtualHost并且在那里放置重写规则,那么这可以一步完成(我的子域的其余部分都是*:443
VirtualHosts,但www
),但我无法弄明白该怎么做。 SO上的这些答案不起作用:
https
重定向)https
重定向有效。编辑:这是我在下面mike.k's answer的评论中引用的代码。
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} www.example.com
RewriteRule ^(.*)$ https://example.com/$1 [R=permanent,L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com%{REQUEST_URI}
</VirtualHost>
答案 0 :(得分:1)
这来自我的生产系统并且有效。
THE_HOSTNAME
例如server
,然后THE_FQHN
是server.domain.edu
,如果您不想支持通配符和多个域名,这有助于SSL证书。
# redirect to FQHN
RewriteEngine on
RewriteCond %{HTTP_HOST} THE_HOSTNAME$
RewriteRule ^(.*)$ https://THE_FQHN/ $1 [R=permanent,L]
# redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteRule (.*) https://THE_FQHN%{REQUEST_URI}
在你的情况下,www.domain.com
将是THE_HOSTNAME
的位置,而THE_FQHN
将是domain.com
,只需翻转