apache - apache htaccess重定向到 https://www

  显示原文与译文双语对照的内容
149 5

我有以下的htaccess代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond!{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST}!^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

我希望我的网站使用HTTPS重定向到 https://www.,并强制执行 www. 子站点,但是当访问 http://www. ( 没有 HTTPS ) 时,它不会重定向。

时间:原作者:0个回答

58 2

如果你需要先检查 environment,然后你就必须先检查这个环境变量 %{HTTPS} off,因为你有第二条规则要强制执行 www.,而不是在第一个规则中使用它。

RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule. * https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST}!^www. [NC]
RewriteRule. * https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

关于代理

当 behind 使用某种代理形式时,客户端通过HTTPS连接到代理,负载均衡器。乘客应用程序。等等 。%{HTTPS} 变量可能永远不会是 on,导致重写循环。因为客户端和代理/负载均衡器正在使用 HTTPS,所以你的应用程序实际上正在接收普通的HTTP流量。在这些情况下,检查 X-Forwarded-Proto 头,而不是 %{HTTPS} 变量。这个答案显示了适当的过程。

原作者:
...