使用htaccess强制SSL和WWW一起使用

6
我想让我的整个网站都通过https运行,并强制使用www。
我看到了许多解决方案,可以强制使用www或https,甚至有一些结合的解决方案,但我似乎无法使它们正常工作。通常会发现自己陷入重定向循环中。
我最接近的解决方案是以下内容,但仍不够完美:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

我需要 https://www.example.com/

http://example.com 成功
https://example.com 成功
http://www.example.com 失败
https://www.example.com 成功,尽管没有实际重定向。

谢谢

更新
下面的代码成功执行所需的重定向:

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

RewriteCond %{ENV:HTTPS} on [NC]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

如果您已经找到了解决方案,就像您的更新所示,请自己发布答案并接受它。这有助于维护网站的问答性质。 - bPratik
3个回答

6

强制使用https和www是通过其他提供的答案的组合实现的。

以下方法似乎可行:

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

RewriteCond %{ENV:HTTPS} on [NC]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

1
尝试使用这个条件,它应该将您的域名强制转换为 SSL。
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

这将强制使用SSL,但不会强制使用www。我已经结合您的规则和其他规则成功地重定向了所需的内容。谢谢。 - Jason Varga

0
尝试在您的条件中添加一个[OR]标志。您真正想要的是没有www或没有https:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

这个确实可以工作,生成的URL就是我想要的,尽管我看到了重定向循环消息 - 而不是网站。 - Jason Varga
@JasonVarga 不确定为什么这会导致重定向循环,原始规则没有这个问题。 - Jon Lin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接