通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.example.com

通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.example.com

由于原因太长且复杂(涉及多层企业繁文缛节,导致其他人不购买我申请的通配符 SSL 证书),我必须设置一个域名将所有请求重定向到https://www.example.com– 与子域名的安全协议www

编辑:SSL 证书仅对 www.xyz.com 域有效。

所以:http://example.comhttp://www.example.com, 和https://example.com是否应全部重定向至https://www.example.com

我的 .htaccess-fu 很弱,似乎无法让它工作。注意:如果这有区别的话,托管在 Media Temple 上。

到目前为止,我的.htaccess 文件如下所示:

RewriteEngine On
RewriteCond %{HTTPS} !^on$
RewriteRule (.*) https://www.example.com/$1 [R,L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

两个都http://example.comhttp://www.example.com重定向至https://www.example.com,所以是的。然而,https://example.com不是重定向至https://www.example.com并因此抛出一个安全警告页面:

这可能不是您正在寻找的网站!
您尝试联系示例.com,但实际上你访问的服务器自称是www.example.com。这可能是由于服务器配置错误或更严重的问题造成的。网络上的攻击者可能试图让您访问假冒(可能有害)版本的示例.com
您不应该继续,特别是如果您以前从未见过此站点的警告。

任何能帮助我渡过这最后的难关的帮助都将不胜感激!

答案1

如果您要重写这些请求example.com,则需要一个对两者都有效的证书(或两个单独的证书来完成此操作)。没有办法解决这个问题。www.example.comwww.example.com

答案2

@Simbus82 关于颠倒规则的说法是对的。这是一种更通用的方法。

RewriteEngine On
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

答案3

颠倒规则;-)

我正在用这个,也遇到了你的问题

RewriteEngine On

RewriteCond %{HTTP_HOST} ^site.it [NC]
RewriteRule (.*) http://www.site.it/$1 [L,R=301]

RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on 
RewriteRule ^(.*)$ http://www.site.it/$1 [R=301,L]

首先重写为 www,然后检查 https。

答案4

我对 .htaccess 的了解也很薄弱,但有其他解决方案吗?

你能重定向所有http://example.comhttp://example.com/redirect.html并有一个他们可以点击的按钮?在页面上解释你在做什么。

你甚至可以用 JavaScript 或其他方法将其设为定时重定向吗?

相关内容