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 如何选择要使用的位置和服务器块有很好的解释。
在 DigitalOcean 中,我们所有 website.net
都将所有流量指向 website.com
。访问 .net
的任何人都将被重定向到 .com
我们有一个场景,我们希望上述内容保持不变,但我们希望只是 一个页面加载到.net
而不是重定向到 .com
website.net/reset
应该可以访问,而 .com
不会发生任何重定向,但我们不确定如何做到这一点,因为这是我们正在解决的边缘情况,这是唯一的解决方案目前
知道如何使用 DigitalOcean 使 website.net/reset
不重定向到 website.com
吗?
更新:
.com
的 DNS
.net
的 DNS
.net
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 如何选择要使用的位置和服务器块有很好的解释。