【问题标题】:Redirecting a HTTPS domain to new HTTPS domain将 HTTPS 域重定向到新的 HTTPS 域
【发布时间】:2019-09-25 20:12:17
【问题描述】:

须知:

我使用 Vultr.com(类似于 DigitalOcean)作为我的 VPS,并使用 Nginx 和 Ubuntu 18.10 x64 运行 1 台服务器。

我正在使用 2 个域:

  • https://(www).oldsite.org
  • https://(www).newsite.org
  • (www) = 带和不带 www 前缀
  • 两个域都有 SSL 证书

我的问题:

目前https://(www)oldsite.org 正在镜像我的https://newsite.org

如果我删除https:// 并且只转到(www)oldsite.org,它会毫无问题地重定向到https://newsite.org

只有当我添加 https:// 时才会发生镜像。

我的问题:

如何修复我的站点可用脚本以将 oldsite 重定向到 newsite

我需要如下重定向:

  • https://www.oldsite.org 重定向到 https://newsite.org
  • https://oldsite.org 重定向到 https://newsite.org

我的脚本:

server {
root /var/www/newsite/public;
 server_name newsite.org www.newsite.org oldsite.org www.oldsite.org;

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/newsite.org-0001/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/newsite.org-0001/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {

    if ($host = www.newsite.org) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = newsite.org) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = oldsite.org) {
        rewrite ^ https://newsite.org$request_uri? permanent;
    } # managed by Certbot


    if ($host = www.oldsite.org) {
        rewrite ^ https://newsite.org$request_uri? permanent;
    } # managed by Certbot


    listen 80;
    listen [::]:80;
    server_name newsite.org www.newsite.org oldsite.org www.oldsite.org;
    return 404; # managed by Certbot
}

而不是这样做:

    if ($host = oldsite.org) {
        rewrite ^ https://newsite.org$request_uri? permanent;
    } # managed by Certbot


    if ($host = www.oldsite.org) {
        rewrite ^ https://newsite.org$request_uri? permanent;
    } # managed by Certbot

我可以使用类似于此的Wildcard 方法吗:

//NOTE THE * before oldsite.org

    if ($host = *oldsite.org) {
        rewrite ^ https://newsite.org$request_uri? permanent;
    } # managed by Certbot

如果我可以有任何前缀有人可能会输入重定向到https://newsite.org,那将是理想的

希望涵盖所有基础并拥有这些oldsite Url 重定向的每个变体。

  • https://oldsite.org
  • https://www.oldsite.org
  • www.oldsite.org
  • oldsite.org

谢谢!

【问题讨论】:

  • 所有https 请求都由第一个server 块处理。您应该将其分成两个单独的块,一个用于处理网站,一个用于处理其他所有内容。见this answer

标签: url nginx redirect server url-rewriting


【解决方案1】:

首先,我建议您为不同的站点使用单独的配置。更容易管理。

我猜这样的脚本变体可以解决你的问题:

server {
     listen 80;
     listen [::]:80;
     server_name oldsite.org www.oldsite.org;
     return 301 https://newsite.org$request_uri;
}

server {
     listen 443 ssl;
     listen [::]:443 ssl;
     server_name oldsite.org www.oldsite.org;
     return 301 https://newsite.org$request_uri;

     ssl_certificate /etc/letsencrypt/live/newsite.org-0001/fullchain.pem; # managed by Certbot
     ssl_certificate_key /etc/letsencrypt/live/newsite.org-0001/privkey.pem; # managed by Certbot
     include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
     ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

【讨论】:

  • 创建一个新的服务器块并按照您的说明操作效果很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多