我正在寻找一种强制使用SSL和www的方法。

我已经能够分别强制使用两种方法,但是在一起我一直遇到重定向问题。以下代码在处理这种格式的URL时起作用:http://example.com并正确重定向到https://www.example.com,但是当传入URL是https://example.com时,它将不会转发到https://www.example.com-有任何建议吗?到http://www.example.com

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/ [R,L]


#1 楼

第一行用于防止内部URL重写。这可能会导致显示不同的页面,所以我将其删除。

如果主机是example.com或未通过HTTPS请求,它将被重写为https://example.com/。即,它一次完成将http://example.comhttp://www.example.comhttps://example.com重写为https://www.example.com

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


有关Apache 2.2 mod_rewrite的文档。

ve个子域(如forum.example.com),第一个规则应为原样。否则,您也可以对www.example.com进行否定匹配。

#2 楼

第三行不必是:

RewriteCond %{HTTP_HOST} ^example\.com$


#3 楼

试试这个:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/ [R,L]


#4 楼

您还可以使用以下我完美使用的代码行。

(如果不使用CloudFlare,请移除顶部RewriteCond)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]


#5 楼

刚刚在我的网站上实现了此功能。
添加到我的.htaccess文件顶部。
重定向输入www或不输入www,http或https的用户的所有实例。

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/ [R,L]
# END HTTPS Redirect


#6 楼

我测试了上面给出的所有建议,但没有一个涵盖整个场景。

我希望所有访问者都可以访问https://www.example1.com/

其他用户提供的某些代码可以将非安全和/或非www网址带到https://www.example1.com/,但是,它们都没有涵盖https://example1.com也可以转换为“ www”。会有所不同。

这是为我工作的代码:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.example1\.com$ [OR]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example1.com/ [L,R=301]


最后一行可能也是:

RewriteRule ^(.*)$ https://www.example1.com/ [R,L]


但是我使用代码“ 301”发送“永久移动”消息,希望谷歌和其他搜索引擎可以更新旧链接。