从 https:// 重定向到 https://www

Posted

技术标签:

【中文标题】从 https:// 重定向到 https://www【英文标题】:redirect from https:// to https://www 【发布时间】:2019-01-31 15:54:38 【问题描述】:

Given 是我的 .htaccess 规则集。

我可以重定向

http://example.comhttps://www.example.comhttp://www.example.comhttps://www.example.com

但是 https://example.com 没有重定向到https://www.example.com

在 Firefox 上出现 This Connection is Untrusted 错误

@Tobias K. google.com Subject Alt Name

Not Critical
DNS Name: www.google.com

但它仍然从https://google.com 重定向到https:www.google.com

.htaccess

Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %HTTPS off [OR]
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule (.*) https://www.example.com%REQUEST_URI [R=301,L]

RewriteCond %REQUEST_URI .html$
RewriteRule ^(.*).html$ /$1.php [R=301,L]

</IfModule>

我在 apache 2.2.34 (AWS linux) 上使用虚拟主机配置

Given 是我的虚拟主机配置vhost.conf

<VirtualHost *:80>

  ServerName example.com

  ServerAlias www.example.com example.com

  DocumentRoot /var/www/vhosts/example.com

  ServerAdmin itsupport@example.com

  ErrorLog /var/www/vhosts/logs/example.com/error_log

  <Directory /var/www/vhosts/example.com>
    AllowOverride All
  </Directory>

</VirtualHost>

ssl.conf

<VirtualHost *:443>
    DocumentRoot /var/www/vhosts/example.com
    ServerName example.com
    ServerAlias www.example.com example.com
    SSLEngine on
    SSLCertificateFile /home/ec2-user/new_cert/www_parentcompany_com.crt
    SSLCertificateKeyFile /home/ec2-user/www_parentcompany_com.key
    SSLCertificateChainFile /home/ec2-user/new_cert/DigiCertCA.crt
    <Directory /var/www/vhosts/example.com>
            AllowOverride All
    </Directory>
</VirtualHost>

如果我遗漏了什么,请告诉我。

尝试了给定的解决方案,但没有运气。htaccess redirect to "https://www."htaccess redirect to https://www

谢谢。

【问题讨论】:

您的证书可能仅在www.example.com 上有效。因此,当您尝试使用它在example.com 上提供网站(或只是重定向)时,您会收到警告。如果您可以重新颁发证书,请将两个名称都包含为subjectAltNames。 这已经解释过了——我可以在上面更深入地解释——这里:***.com/a/10931004/7362396 @TobiasK。 google.com Subject Alt Name 不是关键 DNS 名称:www.google.com 但它仍然从 https://google.com 重定向到 https:www.google.com 我了解到您的主域是 www。如果您想避免重定向时出现“不可信”错误,您仍然需要非 www 变体的有效证书。就像我的链接答案或@Ufuk Tan 答案中所述。 这个问题解决了吗?如果不是,https://www.example.com 是否可以访问? 【参考方案1】:

这个问题可能有两个原因:

1。来自 SSL 证书:

既然你说:

在 Firefox 上出现 This Connection is Untrusted 错误

有些 CA 会自动添加带有 www.example.com 的 example.com 版本,有些则不会。确保您的 SSL 证书对 www.example.comexample.com

均有效

您可以使用以下命令检查您的证书:

openssl s_client -connect example.com:443 | openssl x509 -noout -text

你可以看到 google 有 *.google.com 和 google.com

2。从 Apache 虚拟主机:

据此...

我可以重定向

http://example.com 到 https://www.example.com

http://www.example.com 到 https://www.example.com

...还有这个...

但是https://example.com 没有重定向到https://www.example.com

...我在想,你成功地完成了http的配置,因为两个

http://www.example.com http://example.com

正在重定向到https://www.example.com。

但是从 https://example.com 重定向到 https://www.example.com 必须在 html (:443) 虚拟主机配置中指定。这些规则不能由 http (:80) 虚拟主机配置文件确定。

为了解决这个问题,你必须将这些重写规则添加到 ssl.conf 文件中:

RewriteEngine on
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule ^ https://www.example.com%REQUEST_URI [L,NE,R=permanent]

所以,它可能是这样的:

<VirtualHost *:443>
    DocumentRoot /var/www/vhosts/example.com
    ServerName example.com
    ServerAlias www.example.com example.com

    RewriteEngine on
    RewriteCond %HTTP_HOST !^www\. [NC]
    RewriteRule ^ https://www.example.com%REQUEST_URI [L,NE,R=permanent]

    SSLEngine on
    SSLCertificateFile /home/ec2-user/new_cert/www_parentcompany_com.crt
    SSLCertificateKeyFile /home/ec2-user/www_parentcompany_com.key
    SSLCertificateChainFile /home/ec2-user/new_cert/DigiCertCA.crt
    <Directory /var/www/vhosts/example.com>
        AllowOverride All
    </Directory>
</VirtualHost>

【讨论】:

以上是关于从 https:// 重定向到 https://www的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 将子文件夹重定向到 HTTPS

以 HTML 格式提交表单后重定向到页面

从 https:// 重定向到 https://www

从 http:// 重定向到 https:// [重复]

使用 PHP 从 HTTP 重定向到 HTTPS

如何停止从 HTTP 到 HTTPS 的重定向