如何在 Nginx 和 Apache 上创建 301 重定向


在本文中,我们将学习如何将 URL 或域名重定向到另一个地址。这可以通过使用 HTTP 重定向来实现。URL 重定向是一种常用的技术,用于将一个域名地址指向另一个域名地址,我们可以在 Apache 和 Nginx 上都实现这一点。

重定向到另一个域名

我们可能会遇到这种情况:我们已经建立了一个网站,并且需要更改网站的域名。在这里,我们不能通过删除旧域名来做到这一点,因为这可能会导致旧域名的内容损坏和消失,访问者将无法找到新位置的信息。这也可能导致旧域名流量的损失,从而导致已经建立的域名的信誉损失。

如果我们认为我们的原始域名是“mydomain.com”,并且我们应该购买一个类似的域名,例如“mydomain.net”或“mydomain.org”,则始终建议购买一个类似且与原始域名匹配的域名,以用于演示目的。

通用 SSL 重定向

目前,所有网络流量都重定向到 HTTPS (SSL),而不是标准 HTTP。使用重定向,我们可以将所有来自 http://mydomain.com 的网络流量重定向到 https://mydomain.com。

重定向方法

URL 重定向最常用和最常见的方法是 301(永久重定向)和 302(临时重定向)。

302 临时重定向

临时重定向将通知浏览器内容临时位于另一个位置,并在恢复后访问原始 URL 或网页。

例如,如果我们正在计划网站维护,并且想要将网站重定向以临时服务网络需求,我们将把所有来自您域名的网络流量重定向到维护页面,我们可以在该页面上向访问者提供有关维护的信息。

301 永久重定向

永久重定向将通知浏览器网站不再使用旧 URL 提供服务,应更新此信息并指向我们发布的新 URL。

例如,如果我们需要永久更改域名或将 URL 从旧位置永久更改到新位置,就像我们将内容永久移动到新位置一样。

在 Apache 上重定向

Apache 有不同的模块,我们可以使用 mod_alias 模块和 mod_rewrite 模块来实现重定向,这两个模块都可以广泛用于重定向网络。

在 Apache 上配置重定向

Apache 可以使用简单的“Redirect”指令进行配置,该指令包含在“mod_alias”模块中,此重定向需要两个参数,一个是旧 URL,另一个是新 URL。

重定向的简单配置文件如下所示:

<VirtualHost *:80>
   ServerName www.olddomain.com
   Redirect / http://www.newdomain.com
</VirtualHost>
.
<VirtualHost *:80>
   ServerName www.newdomain.com
   . . .
</VirtualHost>

在上面的配置中,我们指示 Apache 将浏览器重定向到将对 olddomain.com 的网络请求重定向到 newdomain.com,此重定向仅适用于单个网页,不适用于整个网站。

默认情况下,建立的重定向是 302 临时重定向,永久重定向可以通过以下几行完成:

可以通过两种方式完成:

Redirect 301 /oldlocation http://www.newdomain2.com/newlocation
or
Redirect permanent /oldlocation http://www.newdomain2.com/newlocation

RedirectMatch 指令

如果我们需要重定向多个页面,可以使用“RedirectMatch”指令,该指令允许我们使用正则表达式指定与模式匹配的文件夹。它重定向整个目录,而不是单个页面。

RedirectMatch ^/images/(.*)$ http://images.example.com/$1

在上面的代码中,RedirectMatch 匹配括号内的模式,然后使用引用在重定向指令中使用值“$1”进行测试,“1”是第一个测试组,后续组按顺序从数字中获取。

在 Nginx 上重定向

在 Nginx 上重定向可以通过多种方式完成,但最常见的方法是为我们想要重定向的内容创建服务器块。

server {
   listen 800;
   server_name olddomain.com;
   return 301 $scheme://newdomain.com$request_uri;
}

在上面的示例中,我们使用服务器块将对 olddomain.com 的请求重定向到 newdomain.com。

它将返回 URL 重定向中给出的状态代码,并将执行 URL 替换。

“$scheme” 变量用于将原始请求(即 http 或 https)重定向到新格式 URL 中的 301 永久重定向。

可以使用 rewrite 指令将文件夹重定向到单独的子域名或新域名,配置如下。

rewrite ^/images/(.*)$ http://docs.domain2.com/$1 redirect;

上述指令应放在 Nginx 配置的服务器块中,这将对 images 文件夹的请求发出临时重定向到我们指定的新的域名或子域名。

如果我们将上面的行的末尾的重定向更改为永久重定向,则重定向将永久完成。

rewrite ^/images/(.*)$ http://docs.domain2.com/$1 permanent;

在本文中,我们学习了如何将请求 URL 重定向到新位置。我们必须使用正确的重定向方法来优化重定向的使用,以维护网页的存在。此外,请确保在需要修改网站时它也能正常工作。

更新于:2020年1月28日

5000+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告