我尝试了此网站和其他网站上的所有解决方案,但仍然无法将带有 http 的通配符子域名重定向到 https。我最终还是
https://%2A.example.com/site_admin
在我的手机上,上述网址在 Chrome 中显示,在 IE 中显示“无法显示该页面”,在 Chrome 中显示“您的连接不是私密的”。
非通配符 nginx 服务器块工作正常。
我尝试在服务器块中重写并重定向 301 以使用 http 通配符,但它仍将 URL 重写为 %A2(*)。我认为默认服务器使用的是 *.example.com 的服务器名称,但即使使用 $host,它仍会重写为 *。是否还有其他需要包含的指令?
server {
listen 80;
server_name example.com www.example.com;
# tell users to go to SSL version this time
if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name example.com www.example.com;
## ssl and locations not shown
}
server {
listen 80;
server_name manager.example.com ;
# tell users to go to SSL version this time
if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name manager.example.com ;
## ssl and locations not shown
}
server {
listen 80 default_server;
server_name *.example.com "" ;
# tell users to go to SSL version this time
if ($ssl_protocol = "") {
rewrite ^ https://$host$request_uri? permanent;
#rewrite ^ https://$server_name$request_uri? permanent;
}
}
server {
listen 443 default_server;
server_name *.example.com ;
ssl on;
## other ssl and locations not shown
}
答案1
原来是浏览器缓存的问题。清除缓存后,重定向就可以正常工作了。有时这是最简单的事情。
答案2
ssl
您错过了通配符 SSL 块中的实际语句server {}
,因此您实际上在 443 端口上有一个 http 而不是 https。