我有一个网站,希望只有https://myurl.com。正常输入myurl.com应该会被转发到https。
我尝试了不同的方法,例如:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://myurl.com/$1 [R,L]
(重写模式开启)或
NameVirtualHost *:80
<VirtualHost *:80>
ServerName mysite.example.com
DocumentRoot /usr/local/apache2/htdocs
Redirect permanent /secure https://mysite.example.com/secure
</VirtualHost>
但它们没有起作用,哪种方法才是正确的?
Debian 和 Apache 2
答案1
我将其用于端口 80 apache 配置:
<VirtualHost *:80>
ServerName mysite.example.com
RewriteEngine On
RewriteRule ^(.*)$ https://mysite.example.com$1 [R=301,L]
</VirtualHost>
答案2
除了从 HTTP 重定向到 HTTPS 之外,我建议您还使用 HSTS 并在所有 Cookie 上设置安全标志。这将告诉浏览器始终通过 HTTPS(而非 HTTP)进行连接,并且仅通过 HTTPS(而非 HTTP)发送 Cookie。
答案3
您可以将其放在常规 HTTP(例如 *:80)vhost def 中。(当它仅在 HTTP vhost def 中时,无需测试 %{SERVER_PORT} 或 %{HTTPS} 变量。)
这比以前的答案更具可移植性,并且不会因为 DNS 搜索域、CNAMES 等而被不同的主机名绊倒:
RewriteEngine On
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
(但启用 HSTS 的建议也很好。)
答案4
所以,基本上没有任何一种方法起作用,因为我意外地禁用了 apache 在 80 上的监听...很抱歉,这是我的错。
现在也
Redirect permanent / https://mysite
工作中
但是 +1 给 Paul,因为他的建议也有效,并且感谢 Keith 和 DW 提供的有趣的附加信息。