繁体   English   中英

使用.htaccess重定向http://,http:// www。和https:// www。 到https://

[英]Using .htaccess to redirect http://, http://www., and https://www. to https://

似乎已经有人问过这个问题的各种排列方式,但似乎所有答案都有特定的特质,不适用于我的情况,或者就是行不通。

所以,这就是我所追求的...

我想要以下三个URL:

  1. http://example.com
  2. http://www.example.com
  3. https://www.example.com

...全部重定向到:

https://example.com

从另一个答案来看,我尝试过这个。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

但是,这不会从https://www.example.com重定向到https://example.com

因此,结果是证书警告(因为我的证书仅对example.com有效,对www.example.com无效)。

我也尝试过这个(来自https://html5boilerplate.com/ )...

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

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L]
</IfModule>

...但是那也不起作用:

在此先感谢您的帮助。

你不能这样做。

HTTPS是一个外部包装器(顾名思义,传输层)。 服务器获取请求标头,确定HTTP 1.1主机并可以发送Location标头之前,第一HTTPS层应该已经工作(并且证书问题已纠正)。

为此,您要么需要同时对example.com www.example.com都有效的“通配符证书”,要么需要针对所提到的主机使用两种不同的证书,其中一项仅用于提供重定向。

这很难接受,但这就是它的工作原理。

如果CA最终接受www.domaindomain应该带有一个证书(虽然有点贵,但不是两倍或更多),那将是一件很整洁的事情。

尝试:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]

这使用OR条件标志,以便在不是 https 主机以“ www”开头时进行重定向。

在这里需要注意的其他事项:

由于我的证书仅对example.com有效,对www.example.com无效

SSL握手发送HTTP请求之前发生。 这意味着当您请求https://www.example.com/ ,mod_rewrite或htaccess甚至都不是等式的一部分,浏览器将看到该证书并将其立即标记为安全例外。 除了购买新证书,您无能为力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM