乐闻世界logo
搜索文章和话题

Nginx 如何将请求重定向到不同的域?

9 个月前提问
5 个月前修改
浏览次数70

5个答案

1
2
3
4
5

在Nginx中,我们可以通过配置文件来设置重定向规则,将请求从一个域重定向到另一个域。主要有两种方式可以实现重定向:使用 return 指令和使用 rewrite 指令。以下是这两种方式的例子:

使用 return 指令

return 指令是一个相对简单并且推荐使用的方式来进行重定向。您可以在 server 块中定义一个 return 指令来指示Nginx对特定请求返回一个重定向。以下是一个将所有请求从old-domain.com重定向到new-domain.com的示例:

nginx
server { listen 80; server_name old-domain.com; return 301 http://new-domain.com$request_uri; }

在这个配置中,当用户访问 old-domain.com 时,Nginx将发送一个状态码为301(永久重定向)的响应,告诉用户资源已经永久移动到 new-domain.com$request_uri 变量保证了完整的请求URI被包括在重定向中,这意味着任何额外的路径或查询字符串也将保留在新的URL中。

使用 rewrite 指令

rewrite 指令更加灵活,可以根据正则表达式匹配并修改请求的URI。当匹配成功时,可以指定一个新的URI并选择是进行内部跳转还是发送重定向响应。以下是一个将特定路径重定向到另一个域的示例:

nginx
server { listen 80; server_name old-domain.com; location /somepath/ { rewrite ^/somepath/(.*)$ http://new-domain.com/otherpath/$1 permanent; } }

在这个例子中,只有当请求的路径以 /somepath/ 开头时,Nginx才会将请求重定向到 new-domain.com 下的 /otherpath/ 路径。$1 是一个正则表达式捕获组,它会捕获原始请求中 /somepath/ 后面的部分,并将其插入到新URL中。permanent 关键字表示这是一个301永久重定向。

注意事项

  1. 当你使用301重定向时,这表示永久性的重定向,搜索引擎会更新他们的索引以反映新的位置。对于临时性的重定向,你应该使用302状态码。
  2. 请确保在修改Nginx配置后重新加载或重启Nginx服务使配置生效,你可以使用 nginx -s reload 命令来安全地重载配置文件。
  3. 在实施重定向时应确保考虑SEO影响,永久重定向(301)通常对SEO更为友好,因为它们将链接权重传递给新URL。

以上就是通过Nginx将请求重定向到不同域的基本方法和一些注意事项。

2024年6月29日 12:07 回复

server_name支持使用语法进行后缀匹配.mydomain.example

shell
server { server_name .mydomain.example; rewrite ^ http://www.adifferentdomain.example$request_uri? permanent; }

或者在任何 0.9.1 或更高版本上:

shell
server { server_name .mydomain.example; return 301 http://www.adifferentdomain.example$request_uri; }
2024年6月29日 12:07 回复

我正在为我的网站使用此代码

shell
server { listen 80; listen 443; server_name .domain.example; return 301 $scheme://newdomain.example$request_uri; }
2024年6月29日 12:07 回复

如果可以的话为什么要使用重写模块呢return?从技术上讲,return它是重写模块的一部分,您可以在此处阅读,但恕我直言,此代码段更容易阅读。

shell
server { server_name .domain.com; return 302 $scheme://forwarded-domain.com; }

您还可以给它一个 301 重定向。

2024年6月29日 12:07 回复

你的答案