DigitalOcean - 除了一页之外,如何将 website.net 流量路由到 website.com?

DigitalOcean - How to route website.net traffic to website.com except for one page?

在 DigitalOcean 中,我们所有 website.net 都将所有流量指向 website.com。访问 .net 的任何人都将被重定向到 .com

我们有一个场景,我们希望上述内容保持不变,但我们希望只是 一个页面加载到.net 而不是重定向到 .com

website.net/reset 应该可以访问,而 .com 不会发生任何重定向,但我们不确定如何做到这一点,因为这是我们正在解决的边缘情况,这是唯一的解决方案目前

知道如何使用 DigitalOcean 使 website.net/reset 不重定向到 website.com 吗?

更新:

.com 的 DNS

.net 的 DNS

.net

的 Nginx 配置
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.website.net;

    # Match /reset request exactly and redirect   
    location /reset {
      # Redirect /reset to google does not work, redirects to website.com instead
      # return 301 http://google.com/;
      # Redirect /reset to website.net/reset does not work, redirects to website.com instead
      return 301 http://www.website.net/reset;
    }

    # Redirect .net to .com
    return 301 https://www.website.com$request_uri;

    ...
}

.com/.net 添加了 DNS 并为 .net 添加了 nginx 配置,但仍然 website.net/reset 重定向到 website.com。知道如何更改它以使其转到 website.net/reset 而不是重定向到 website.com 吗?

最简单的方法可能是更新 .net 服务器的服务器配置,以针对网站以外的所有内容向 .com 地址发出 301 重定向响应。com/reset。具体细节取决于您使用的网络服务器,例如 nginx、apache 等。

对于 Apache,这可以使用 RedirectMatch 指令来完成:

<VirtualHost digitaloceanwebsite.net:80>
        ServerName digitaloceanwebsite.net
        # Respond with a 301 redirect to all requests not made to /reset, /other, or /different/page
        RedirectMatch permanent ^(?!\/reset$|\/other$|\/different\/page$) http://digitaloceanwebsite.com
        DocumentRoot "/srv/http/digitaloceanwebsite/net"
        <Directory "/srv/http/digitaloceanwebsite/net"> 
                ...
        </Directory> 
</VirtualHost>

<VirtualHost digitaloceanwebsite.com:80>
        ServerName digitaloceanwebsite.com
        DocumentRoot "/srv/http/digitaloceanwebsite/com"
        <Directory "/srv/http/digitaloceanwebsite/com"> 
                ...
        </Directory> 
</VirtualHost>

如果您的网站托管在不同的服务器上,只需确保 website.net 服务器的配置中包含 RedirectMatch。

更新回复:

查看您发布的 nginx 配置,服务器块中的 301 return 似乎优先于位置块。

这个 nginx 配置应该可以满足您的需求。

server {
    ...
    server_name www.website.net;

    # = specifies that this is an exact match which immediately takes precedence
    location = /reset {
        # location block for www.website.net/reset
    }

    # redirects all other requests
    location / {
        return 301 https://www.website.com$request_uri;
    }
}

此外,如果您需要添加其他例外或只是想对此做一些进一步阅读,this page at Digital Ocean 对 nginx 如何选择要使用的位置和服务器块有很好的解释。