Nginx重定向链接



这就是我所拥有的

http://example.com ---> https://www.example.com ---> https://example.com

这就是我想要达到的目标

http://example.com ---> https://example.com

我当前的nginx配置有下面提到的行

if ($real_scheme = 'http') { return 301 https://$host$request_uri; }

其中real_scheme是从Map块派生的变量

我试图实现相同的使用地图,谁能让我知道我所犯的错误,下面是更新的配置

map $host $nonwwwhost {
~*^www.(.*)   $1;   
default     $host;
}
if ($real_scheme = 'http') { return 301 https://$nonwwwhost$request_uri; }

我想说使用map进行https重定向是不鼓励的,因为标准做法是分配server块并在其中设置重定向。

总共需要3个服务器块来覆盖重定向到所需的规范域名和端口。

重定向流可以不同,但我建议遵循HSTS重定向要求。

如果你的规范域名是example.com而不是www.example.com,这些将是你的服务器块:

server {
listen 80; 
server_name www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
more_set_headers "Strict-Transport-Security: max-age=31536000; includeSubDomains; preload";
ssl_certificate ...;
ssl_certificate_key ...;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 80; 
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2;
more_set_headers "Strict-Transport-Security: max-age=31536000; includeSubDomains; preload";
ssl_certificate ...;
ssl_certificate_key ...;
server_name example.com;
... main website directives go here
}

这种设置确保了如果访问者首先访问http://www.example.com,他首先被重定向到https://www.example.com和https://example.com,确保他的浏览器获得相应的HSTS策略。

最后找到了使用regex表达式实现此目的的方法

map $host $nonwwwhost {
~*^www.(?<domain3>S+)*  $domain3;
default     $host;
}

相关内容

  • 没有找到相关文章

最新更新