将所有 URL 重定向到 SSL,X 除外

将所有 URL 重定向到 SSL,X 除外

我在 Vesta CP 上运行 NGINX。有两个单独的文件nginx.confsnginx.conf。每个文件都有一个服务器块。我将整个站点重定向到 SSL。为此,我在 中添加了return 301 https://example.com$request_uri;nginx.conf然后我完全配置了sningx.conf以进行缓存和位置块以及其他所有内容。

我确实有一个部分 SSL/非 SSL 的域名。在这些文件中,我没有 301,而是 301 了一个位置块,如下所示:

location ~ ^/(wp-login.php|wp-admin|wp-login|shop|product|my-account|checkout-2|order-pay|order-received|add-payment-method|cart) {
return 301 https://domain.com$request_uri;}

在 SSL 块中我排除了:

location ~ ^(?!/(wp-login.php|wp-admin|wp-login|shop|product|my-account|checkout-2|order-pay|order-received|add-payment-method|cart)) {
return  301 http://sergerpepper.com$request_uri;}

我需要在 SSL 和非 SSL 上都提供一个 URL,其他一切都在 SSL 上。此 URL 是站点地图。因此,这两个都可以使用:

http://example.com/sitemap_index.xml

https://example.com/sitemap_index.xml

但任何其他 URL 都只能在 SSL 上。使用上述重定向方法,我可以将 URL 指向 HTTP 或将其排除在 HTTPS 之外,但不能同时进行。

答案1

您的 https 服务器块不应将任何内容重定向到 http,因为在这种情况下您不需要这样做。

你的 http 服务器块应该重定向除有问题的 URL 之外的所有内容:

server {
    listen [::]:80;
    listen 80;
    server_name .example.com;
    root /srv/www/example.com;

    location = /sitemap_index.xml {
        try_files $uri =404;
    }

    location / {
        return 301 https://$host$request_uri$is_args$args;
    }
}

相关内容