Nginx 中从 www 重定向到非 www 不起作用

Nginx 中从 www 重定向到非 www 不起作用

我无法将我的一个域名从 www 重定向到非 www。过去我使用过类似(即完全相同)的配置,而且成功了。但不知何故,这个配置却不起作用。

我的第一部分是我想要的配置https://example.org。基本上没有 www 并且通过 SSL 提供服务。

server {
    server_name example.org;

    root /var/www/example.org/html;
    index index.php index.html index.htm;

    access_log /var/www/example.org/logs/access.log;
    error_log /var/www/example.org/logs/error.log;

    try_files $uri $uri/ /index.php$is_args$args;

    # pass PHP scripts to FastCGI server
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    location ~ /\.ht {
        deny all;
    }

    listen 443 ssl; 
    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; 
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
}

然后我有一个部分将 https 上的 www 重定向到 https 上的非 www:

server {
    if ($host = www.example.org) {
        return 301 https://example.org$request_uri;
    } 

    listen 443 ssl; 
    server_name www.example.org;
    ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; 
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

}

然后我有一个部分将 http 重定向到 https:

server {
    if ($host = example.org) {
        return 301 https://example.org$request_uri;
    }

    listen 80;
    server_name example.org;
    return 404; 
}

最后,我将 www http 重定向到非 www https。

server {
    if ($host = www.example.org) {
        return 301 https://example.org$request_uri;
    } 

    listen 80;
    server_name www.example.org;
    return 404; 
}

我希望看到以下内容:

  • https 非 www -> 显示网站;
  • https www -> 重定向到 https 非 www;
  • http 非 www -> 重定向到 https 非 www;
  • http www -> 重定向到 https 非 www。

实际情况:

  • https 非 www -> 显示网站(好)。
  • https www -> 显示默认 NIGNX 页面(不好)。
  • http 非 www -> 重定向到 https 非 www 然后显示该网站(好)。
  • http www -> 重定向到 https www 然后显示默认的 NGINX 页面(不好)。

我在这里错过了什么?在我看来,这应该有效,但事实并非如此。我已经重新加载/重新启动了 nginx,确保文件确实已加载,重新组织了其中一些部分的顺序,但这没有帮助。

感谢您的阅读。

相关内容