首页 > 解决方案 > CentOs Nginx 重定向 https://www 到 https://

问题描述

我在 centos 中使用 Nginx。我面临重定向问题。

我想将所有请求重定向到https://some-domain.com/url

我能够重定向

http://www.some-domain.com to https://some-domain.com
www.some-domain.com to https://some-domain.com
http://some-domain.com to https://some-domain.com

但我无法重定向https://www.some-domain.com

配置文件:

server
{
    listen 443 ssl;

    server_name some-domain.com www.some-domain.com;
 ssl_certificate     /etc/nginx/ssl/some-domain.com.chained.crt;
 ssl_certificate_key /etc/nginx/ssl/some-domain.com.key;

if ($host = https://www.some-domin.com) {
        return 301 https://some-domin.com$request_uri;
    }
}

标签: nginxredirecthttpscentosno-www

解决方案


最好将两个服务器括号分开以避免使用“if”。您的问题是您向主机添加了“https://”,而您需要比较的只是 www.some-domain.com。

这个例子更简单:

#Server bracket for https connections that come with host www.some-domain.com
server
{
    listen 443 ssl;
    server_name  www.some-domain.com;
    ssl_certificate     /etc/nginx/ssl/some-domain.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/some-domain.com.key;

    #redirects to https://non-www

    location / {
        return 301 https://some-domin.com$request_uri;
    }
}



# and then you can set a server bracket for non-www https connections.
# nginx will sort the connections depending on host for itself
server
{
    listen 443 ssl;

    server_name some-domain.com;
    ssl_certificate     /etc/nginx/ssl/some-domain.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/some-domain.com.key;

    #Here it arrives 443 and without www, do what you wanted here
}

推荐阅读