我有一台 WAMP 服务器,上面有几个网站。我想只为其中一个网站默认启用 SSL。
虽然https://www.example.com可以访问,没有发生自动重定向http://www.example.com。
还httpd -t
显示Syntax Ok
这是我的httpd-vhosts.conf
文件
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "C:/wamp/www/example"
ServerName http://manage.example.com/
ServerAlias http://manage.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot "c:/wamp/www/example/public"
ServerName example.com
ServerAlias www.example.com
SSLEngine on
SSLCertificateFile "C:/wamp/OpenSSL/cert/sslcert.cert"
SSLCertificateKeyFile "C:/wamp/OpenSSL/certs/mydomain.key"
</VirtualHost>
答案1
你的错误在这里:您正在使用 %{HTTP_HOST} 而不是 %{SERVER_NAME}
以下是将 http 流量重定向到 https 的 3 种方法:
1 - 使用重定向(https://httpd.apache.org/docs/2.4/en/mod/mod_alias.html)
这是 apache 推荐的:https://httpd.apache.org/docs/2.4/rewrite/avoid.html
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
# [ Http to Https ]
Redirect 301 / https://www.example.com/
</VirtualHost>
2——使用重写条件(https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html)
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
# [ Http to Https ]
RewriteEngine on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
3-使用虚拟主机外部重写
RewriteCond %{HTTPS} !on
RewriteCond %{SERVER_NAME} !manage.example.com
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
或者
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{SERVER_NAME} !manage.example.com
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
奖金-更多信息:
如果你想使用你的正则表达式变量
RewriteRule (.*) https://%{SERVER_NAME}$1
(.*) = 捕获正则表达式中的所有内容
$1 = 结果变量,它将以 / 开头(因此前面不需要额外的 /)
R = 重定向状态代码,这里有列表:
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
L = 标志,表示最后,这里有标志列表代码:
https://httpd.apache.org/docs/2.4/rewrite/flags.html
一旦配置改变,apache 需要重新启动
答案2
您的重写规则不正确。您忘记使用 rewriteCond 来检查您使用的是 HTTP 还是 HTTPS。
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
答案3
您的描述似乎RewriteRule
不正确,请尝试以下操作:
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
欲了解更多信息,请访问Apache 维基。