如何使用 Nginx 重定向到另一个 URL?(Nginx URL 重定向)

HTTP 重定向(或 Nginx 重定向)是一种将用户和浏览器从一个网址引导到另一个网址的技术。它通常用于网站结构或域名发生变化的情况。重定向有多种类型,每种类型都会向浏览器传达不同的变更信息。

最常用的两种类型是:临时重定向(HTTP 状态码 302):适用于内容被临时移动的情况。例如,在维护期间,您可以将用户重定向到一个说明停机原因的临时页面。
永久重定向(HTTP 状态码 301):

它会告知浏览器和搜索引擎某个页面已被永久移动,通常用于切换到新域名或永久性地调整网站结构。本指南将深入介绍如何使用 NGINX 配置这两种重定向,并针对常见的重定向场景提供实用示例。

前提条件

开始本教程之前,请确保您已具备以下条件:

  • 一台已安装 NGINX 并正确配置用于托管网站的服务器。
  • 如果您需要配置方面的帮助,可以参考适用于 Ubuntu 22.04、Debian 或 CentOS 等操作系统的安装指南。

什么是 Nginx 重定向?

在 NGINX 中,重定向是一项服务器端功能,用于将传入的请求从一个 URL 转发到另一个 URL。在更新网站结构、更换域名或统一 URL 格式时,重定向起着至关重要的作用。NGINX 支持多种类型的重定向,最常用的是永久重定向(301)和临时重定向(302)。

重定向可以在 NGINX 的 server 块(也称为虚拟主机或 vhost 文件)中配置。常见用例包括:

  • 将 HTTP 流量重定向到 HTTPS,以建立安全连接
  • 强制 URL 统一使用带 www 或不带 www 的版本
  • 根据 URL 模式设置临时或永久重定向规则

这样,您可以控制网站的流量走向,并有助于提升安全性、SEO 和用户体验。

Nginx 如何重定向到另一个 URL?

借助默认可用的内置 rewrite 指令,NGINX 可以轻松创建重定向。您只需指定要匹配的模式和新的目标 URL,即可定义临时重定向和永久重定向。

示例 1:临时重定向特定页面

以下 server 块会将 example-site.com 上对 /old-page 的请求重定向到同一域名下的 /maintenance.html:

server {
listen 80;
server_name example-site.com;
location /old-page {
rewrite ^/old-page$ /maintenance.html redirect;
}
}

这会设置一个临时(302)重定向,适用于页面短时间不可用的情况,例如维护期间。

示例 2:将所有流量临时重定向到另一个域名

要将 blog.example.com 的所有流量转发到 archive.example.net,同时保留请求路径:

server {
listen 80;
server_name blog.example.com;
rewrite ^/(.*)$ https://archive.example.net/$1 redirect;
}

这会将每个请求以相同的路径发送到新域名,但采用的是临时重定向。

示例 3:从 HTTP 永久重定向到 HTTPS

使用 301 重定向强制所有 HTTP 流量改用 HTTPS:

server {
listen 80;
server_name mysite.org;
return 301 https://$host$request_uri;
}

这是提升安全性和 SEO 的最佳实践。

示例 4:从不带 WWW 永久重定向到带 WWW

如果您想将 example.org 的所有流量永久重定向到 www.example.org:

server {
listen 80;
server_name example.org;
return 301 http://www.example.org$request_uri;
}

这可确保用户和搜索引擎始终访问首选域名。

重定向到新域名

将网站迁移到新域名时,切勿让旧域名闲置。如果不设置重定向,所有书签、外部链接和已被索引的页面都会指向失效的 URL,可能导致流量流失并损害 SEO。

在本节中,我们将介绍如何使用 NGINX 将旧域名(例如 domain1.com)的流量永久重定向到新域名(domain2.com)。由于迁移是永久性的,我们将使用 301 重定向,以确保搜索引擎和浏览器今后将新域名视为正式目标。

假设您已经在 NGINX 中配置了两个 server 块:

旧域名:/etc/nginx/sites-available/domain1.com

server {
listen 80;
server_name domain1.com;
# Existing configuration
}

新域名:/etc/nginx/sites-available/domain2.com

server {
listen 80;
server_name domain2.com;
# New site setup
}

应用重定向

现在,您需要修改旧域名的配置,使用永久重定向将所有流量发送到新域名:

server {
listen 80;
server_name domain1.com;
rewrite ^/(.*)$ https://domain2.com/$1 permanent;
}

在此配置中:

  • 正则表达式 ^/(.*)$ 会捕获传入 URL 中根路径(/)之后的所有内容。
  • 目标 URL 中的 $1 会将捕获到的路径插入重定向地址中。
  • 在 rewrite 语句末尾添加 permanent,会让 NGINX 发送 301 HTTP 状态码,浏览器和搜索引擎会将其理解为永久迁移。

例如,对 http://domain1.com/contact.html 的请求会自动重定向到 https://domain2.com/contact.html。

重新加载 Nginx 配置

完成此更改后,请记得验证并重新加载 NGINX 配置:

$ sudo nginx -t
$ sudo systemctl reload nginx

这可确保新的重定向规则生效,所有访问者以及搜索引擎都会被正确引导到新域名。

结论

现在您已经了解如何在 NGINX 中设置重定向。选择正确的类型(永久或临时)非常重要,因为选错类型可能会影响 SEO。

Nginx 重定向还可用于强制使用 HTTPS 和统一 URL 格式(例如添加 www.)。使用得当,它们可以帮助您在灵活调整网站结构的同时保住网站流量。

如需深入了解,请参阅 NGINX 官方文档,尤其是关于 rewrite 模块和重定向指南的部分。

BlueVPS 提供功能强大的 VPS 服务器,选择基于 Windows 的服务器时可获得完整的 RDP 管理员访问权限,让您完全掌控服务器管理。我们的 VPS 解决方案配备知名品牌的高性能企业级 SSD,确保存储快速可靠。

BlueVPS 让扩容变得轻松:当您的需求增长时,可以快速升级服务器资源,停机时间极短。体验灵活、稳健、按需定制的 VPS 主机服务。

立即体验提供完整 root 访问权限、可靠且可扩展的 VPS 主机服务: BlueVPS。

blog