在我的.htaccess文件中,我创建了以下规则,以确保它始终是HTTPS:
# Redirect To HTTPS...
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
是否可以安全地假设443以外的每个端口都应重定向到HTTPS?是否还应在特定场合允许其他端口?我希望我的网站永远不会被解密。
答案 0 :(得分:2)
将以下规则添加到.htaccess中,它会使强制https独立于端口,并将所有http流量重定向到https。
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答案 1 :(得分:1)
根据RFC文档http://www.rfc-editor.org/rfc/rfc2616.txt,端口80和443是HTTP / HTTPS的默认端口。因此浏览器将自动使用这些端口连接这些协议。如果不是80/443,则需要向浏览器提供端口号。
因此,除非您有理由从非标准端口提供服务,否则您可以从端口80重定向到443.您已经知道如果您开始使用另一个端口进行HTTP连接或者同样使用catch all all redirect to 443使用端口80重定向然后添加更多端口进行服务将不会重定向。
根据您的要求,有很多方法可以编写重定向。
端口80重定向的示例:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
答案 2 :(得分:1)
除非明确要求,浏览器才会连接到端口80(如果指定了https,则为443)。您的Web服务器应该只监听端口80和443,因此您只需要重定向端口80。
如果您希望始终提供https,那么您应该添加HSTS并预加载您的网站:
https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security
https://hstspreload.appspot.com/
HSTS是一个标题,告诉浏览器只能连接到https,而不是http,但它只能在第一次成功连接后才能工作(因此第一个连接可能不安全)。如果你预加载它,那么浏览器知道你的网站甚至在第一次访问之前只使用https,所以它也可以保护它。
答案 3 :(得分:1)
如果您可以控制Apache配置并关注性能匹配,则无需使用.htaccess
和mod_rewrite
。这样可以避免为每个Web请求加载和解析.htaccess
。
只需在虚拟主机配置中使用这个简单的Redirect
指令:
<VirtualHost *:80>
ServerName www.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost>