redirect - 使用 SSL 的 www 重定向的 mod_rewrite

标签 redirect mod-rewrite ssl dns cname

目前,访问我们的 www URL 的用户会收到 SSL 错误,即“该网站的证书无效”。这是因为我们只有一个证书,它是为非WWW URL配置的:mysite.co

我们想要任何一个请求

http://www.mysite.co   
https://www.mysite.co

https://mysite.co

相反的情况是可以接受的,因为我们的动机是通过只支付一个证书来最大限度地降低成本,无论是 www 还是没有 www。我读过 another post ,说 SSL 协商发生在服务器的任何响应之前(在我们的例子中是重定向),因此访问者在使用不在我们通用名称中的域时会收到警告。但是,我修改了 DNS 以包含 CNAME,以便所有 www.mysite.co 流量都重定向到 mysite.co,我们仍然在 Firefox 和 Safari 中看到错误

我们使用 Ubuntu 和以下 mod_rewrite

1) 在/etc/apache2/sites-available/mysite-ssl

<VirtualHost *:443>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} www.mysite.com  [NC]
        RewriteRule ^(.*)$ https://mysite.com/$1 [R=permanent,L,NC]
        ServerAdmin admin@mysite
        ServerName mysite
        ServerAlias www.mysite

        ... other stuff ... 

</VirtualHost>

2) 在/etc/apache2/sites-available/mysite

<VirtualHost *:80>
        RewriteEngine on
        ReWriteCond %{SERVER_PORT} !^443$
        RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
</VirtualHost>

有趣的是,当访问 WWW.mysite.co(http 和 https)时,Chrome 显示一切正常

但是 Firefox 和 Safari 都提示主机名不匹配(无法验证身份)

最佳答案

因此,经过更多阅读和研究后,上述规则可用于将流量从 www.site.co 重定向到 site.co

但是,使用一个 SSL 证书保护两个或更多 URL 的唯一方法是购买:

  1. 通配符 SSL 证书,涵盖 *.site.co .. 这些不需要在购买时定义

  2. 具有一个或多个主题备用名称 (SAN) 的 SSL 证书,涵盖 www.site.co .. mail.site.co .. 等。这些需要在以下情况下定义您购买证书,指定每个 SAN

关于redirect - 使用 SSL 的 www 重定向的 mod_rewrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584537/

相关文章:

php - 使用 mod_rewrite 删除 .php

.htaccess - 如何处理重写规则中的连字符(-)?

objective-c - 如何轻松重定向 NSTextView 中的控制台输出?

apache - htaccess mod rewrite - 我的一半规则(都相似)不起作用

python:使用 TLS 的 smtp 不传递任何消息

ruby-on-rails - 如何让 Nginx 和 Phusion Passenger 维护两个 Rails 实例之间的 session ?

c# - SSL + Jquery + Ajax

jsf - 如何从 JSF 中的 managedBean 重新加载同一页面?

java - 如何使用 jSTL 从 url 获取一些值

javascript - ZF 1.9 从前端 html 重定向