我有一个站点www.example.com
,该站点使用RewriteEngine将HTTP流量重定向到HTTPS:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/
....
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com$1 [L]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</VirtualHost>
我发现的问题是google已将该网址编入索引:
http://www.example.com:443
给出此错误:
我尝试重定向流量,从而从80个和443个虚拟主机添加永久重定向:
<VirtualHost *:80>
...
RewriteEngine on
#RewriteCond %{HTTP_HOST} ^example.com [NC]
#RewriteRule ^(.*)$ https://www.example.com$1 [L]
#RewriteCond %{SERVER_PORT} ^80$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</VirtualHost>
<VirtualHost *:443>
...
RewriteEngine on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</VirtualHost>
没有成功。将所有流量从http://www.example.com:443(和派生页面)重定向到https://www.example.com的正确方法是什么?
最佳答案
将所有流量从http://www.example.com:443(和派生页面)重定向到https://www.example.com的正确方法是什么?
没有这样的方法:http://www.example.com:443
表示与端口443建立TCP连接,然后直接说HTTPhttps://www.example.com:443
表示建立到端口443的TCP连接,进行TLS握手,然后在此TLS连接中说HTTP。
如您所见,两种访问都使用TCP连接到同一端口,但是一种访问是对服务器说HTTP,而另一种TLS是对同一服务器(同一主机和端口表示同一服务器)。虽然理论上可以区分HTTP请求(用于http://...:443
)和TLS握手的开始(用于https://...:443
),并分别处理它们,但是服务器通常不支持这种功能,因为通常的方式是使用http的端口80和https的端口443。
这意味着服务器希望在端口443上进行TLS握手。服务器检测到它没有获得TLS握手,而是收到HTTP请求,然后将“错误请求”消息返回给客户端,说明这是错误的请求此端口。
关于.htaccess - 将HTTP流量从443端口重定向到SSL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30456257/