我在 Vesta CP 上运行 NGINX。有两个单独的文件nginx.conf
和snginx.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;
}
}