如何使用 Apache 和 Nginx 创建临时和永久重定向

2023-11-19

介绍

HTTP 重定向或 URL 重定向是一种将一个域或地址指向另一个域或地址的技术。重定向有很多用途,并且需要考虑几种不同类型的重定向。每当站点需要将请求一个地址的人定向到另一个地址时,就会使用重定向。

当您创建内容和管理服务器时,您经常会发现需要将流量从一个地方重定向到另一个地方。本指南将讨论这些技术的不同用例,以及如何在 Apache 和 Nginx(两种最常见的 Web 服务器)中实现它们。

先决条件

  • 通过以下方式设置 Ubuntu 20.04 服务器Ubuntu 20.04 初始服务器设置指南,包括 sudo 非 root 用户和防火墙。

  • Apache 或 Nginx 安装在您的服务器上,您可以按照以下步骤进行操作如何在 Ubuntu 20.04 上安装 Apache or 如何在 Ubuntu 20.04 上安装 Nginx。 Apache 和 Nginx 可以同时安装,并且许多堆栈同时使用这两个服务器,但默认情况下,它们会在默认 HTTP/HTTPS 端口上发生冲突80 and 443,因此,如果您在库存服务器配置上遵循本教程,则一次应该只安装一个。

第 1 步 – 检查重定向方法

重定向有很多用例。如果您已经建立了网站并想要更改您的域名,最好不要放弃您的旧域名。如果您的内容消失而没有向浏览器提供有关如何找到其新位置的任何说明,则您网站的书签以及位于整个互联网其他页面上的网站链接将会损坏。更改域名而不重定向将导致您的网站失去以前访问者的流量,并失去您努力建立的所有可信度。

通常,注册名称的多个变体会很有帮助,以便从输入与您的主域类似的地址的用户中受益。例如,如果您有一个名为myspiders.com,您也可以购买以下域名myspiders.net and myspiders.org并将它们重定向到您的myspiders.com地点。这使您可以捕获可能尝试使用错误地址访问您网站的用户。它还可以帮助防止其他网站使用类似的域并从您的网站中获利。

有时,有必要更改网站上已发布并收到流量的页面的名称。通常,这会导致 404 Not Found 错误或可能另一个错误,具体取决于您的安全设置。通过将访问者引导到包含他们试图访问的正确内容的另一个页面,可以避免这些问题。 URL 重定向有几种不同的类型,每种类型对于客户端浏览器来说都有不同的含义。最常见的两种类型是 302 临时重定向和 301 永久重定向。

临时重定向

如果您的某个 URL 的 Web 内容暂时需要从其他位置提供,则临时重定向非常有用。例如,如果您正在执行站点维护,您可能需要将您的域的所有页面临时重定向到说明页面,以通知访问者您很快就会回来。

临时重定向通知浏览器内容暂时位于不同位置,但它们应继续尝试访问原始 URL。

永久重定向

当您的内容已永久移动到新位置时,永久重定向非常有用。

当您需要更改域或由于其他原因需要更改 URL 并且旧位置将不再使用时,这非常有用。此重定向通知浏览器不应再请求旧 URL,并应更新其信息以指向新 URL。

强制 SSL

重定向的常见用途是引导所有站点流量使用 SSL 而不是标准 HTTP。

Using redirects, it is possible to make all requests for http://www.mysite.com be redirected to https://www.mysite.com. Using LetsEncrypt to provide HTTPS will automatically generate a redirect configuration like this.

在本教程的下一部分中,您将学习一些使用 Apache Web 服务器进行重定向的示例配置。如果您使用 Nginx 并且不打算使用 Apache,则可以跳到步骤 3。

第 2 步 – 如何在 Apache 中重定向

Apache 可以使用几种不同的工具进行重定向。可以使用以下工具来实现直接重定向mod_alias模块,并且可以使用以下命令创建更广泛的重定向mod_rewrite.

使用重定向指令

在 Apache 中,您可以使用“Redirect”指令实现单页重定向,该指令包含在mod_alias默认情况下启用的模块。该指令至少需要两个参数:旧 URL 和新 URL。

Apache server blocks can be stored in the primary Apache settings file in /etc/apache2/apache2.conf, but are more maintainable if you create a new file in /etc/apache2/sites-available/ for each configuration. Apache’s convention is to create symbolic links (like shortcuts) from files in sites-available/ to another folder called sites-available/ as you decide to enable or disable them. By default, Apache is installed with a single site-specific configuration in /etc/apache2/sites-available/000-default.conf which is enabled and linked to /etc/apache2/sites-enabled/000-default.conf.

您可以使用打开该配置nano或您最喜欢的文本编辑器:

  1. sudo nano/etc/apache2/sites-available/000-default.conf

默认情况下,它包含一个标准的 Web 服务器配置,该配置将侦听端口 80 并查找index.html文件位于/var/www/html在您的系统上。

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
</VirtualHost>

如果您需要重定向请求domain1.com to domain2.com,您可以从此服务器块中删除现有指令并用永久重定向替换它们:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
	ServerName www.domain1.com
	Redirect / http://www.domain2.com
</VirtualHost>

<VirtualHost *:80>
	ServerName www.domain2.com
	. . .
	. . .
</VirtualHost>

保存并关闭文件。如果您正在使用nano,按“Ctrl+X”,然后在出现提示时按“Y”,然后按 Enter。

此重定向指示浏览器将所有请求定向到www.domain1.com to www.domain2.com。这仅适用于单个页面,不适用于整个网站。

默认情况下,Redirect指令建立 302 或临时重定向。如果您想创建永久重定向,可以通过以下两种方式之一执行此操作:

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
	ServerName www.domain1.com
Redirect 301 /oldlocation http://www.domain2.com/newlocation
</VirtualHost>
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
	ServerName www.domain1.com
Redirect permanent /oldlocation http://www.domain2.com/newlocation
</VirtualHost>

使用 RedirectMatch 指令

要重定向多个页面,您可以使用RedirectMatch指令,它允许您使用正则表达式指定目录匹配模式。

这将允许您重定向整个目录,而不仅仅是单个文件。

RedirectMatch匹配括号中的模式,然后使用“$1”在重定向中引用匹配的文本,其中 1 是第一组文本。随后的组按顺序给出编号。

例如,如果您想匹配对某个内容的每个请求/images目录到名为的子域images.example.com,您可以使用以下内容:

/etc/apache2/sites-available/default
<VirtualHost *:80>
…
RedirectMatch ^/images/(.*)$ http://images.example.com/$1
…
</VirtualHost>

Redirect指令中,您可以通过在 URL 位置规则之前添加重定向代码来指定重定向类型。

为了使更改生效,您需要重新启动 Apache。在现代 Ubuntu 服务器上,您可以使用以下命令来执行此操作systemctl:

  1. sudosystemctl 重新启动 apache2

使用 mod_rewrite 重定向

创建重定向规则最灵活但最复杂的方法是使用名为mod_rewrite。有关合作的信息mod_rewrite,参考如何使用 Apache 的 mod_rewrite 重写 URL.

在本教程的下一部分中,您将学习一些使用 Nginx Web 服务器进行重定向的示例配置。如果您已经安装并配置了 Apache,则需要先释放端口 80,然后才能在同一服务器上执行 Nginx 的配置步骤。您可以通过暂时卸载 Apache 来完成此操作apt remove,如果您以后想要重新安装它,它将保留您的配置文件,或者通过更改 Apache 的配置来侦听 80 以外的端口上的连接,默认情况下,Apache、Nginx 和所有 HTTP 连接都使用该端口。

步骤 3 – 如何在 Nginx 中重定向

Nginx 中的重定向是一项核心功能,它利用常见的 Nginx 指令。大多数时候,您可以通过为每个 URL 创建一个新的服务器块来实现重定向。

Nginx server blocks can be stored in the primary Nginx settings file in /etc/nginx/nginx.conf, but are more maintainable if you create a new file in /etc/nginx/sites-available/ for each configuration. Nginx’s convention is to create symbolic links (like shortcuts) from files in sites-available/ to another folder called sites-available/ as you decide to enable or disable them. By default, Nginx is installed with a single site-specific configuration in /etc/nginx/sites-available/default which is enabled and linked to /etc/nginx/sites-enabled/default.

您可以使用打开该配置nano或您最喜欢的文本编辑器:

  1. sudo nano/etc/nginx/sites-available/default

默认情况下,它包含一个标准的 Web 服务器配置,该配置将侦听端口 80 并查找index.html文件位于/var/www/html在您的系统上。

/etc/nginx/sites-available/default
server {
        listen 80 default_server;
        listen [::]:80 default_server;
…
        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
…
}

如果您需要重定向请求domain1.com to domain2.com,您可以从此服务器块中删除现有指令并用永久重定向替换它们:

/etc/nginx/sites-available/default
server {
	listen 80;
	server_name domain1.com;
	return 301 $scheme://domain2.com$request_uri;
}

保存并关闭文件。如果您正在使用nano,按“Ctrl+X”,然后在出现提示时按“Y”,然后按 Enter。

The return指令执行 URL 替换,然后返回给定的状态代码和重定向 URL。

在这种情况下,它使用$scheme变量以使用原始请求中使用的任何方案(http 或 https)。然后它返回 301 永久重定向代码和新形成的 URL。

为了处理到单独子域的文件夹重定向,您可以使用以下命令执行类似于 Apache 文件夹重定向的操作:rewrite指示。当该指令放置在服务器块中时,将为服务器内的请求发出临时重定向images子域目录images.example.com:

/etc/nginx/sites-available/default
server {
…
rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
…
}

对于永久重定向,您可以更改redirect to permanent在声明的末尾。

为了使更改生效,您需要重新启动 Nginx。在现代 Ubuntu 服务器上,您可以使用以下命令来执行此操作systemctl:

  1. sudosystemctl 重新启动 nginx

您可以通过许多其他方式扩展此配置。使用 Nginx 的这些基础知识来生成所需的服务器配置可以使您的堆栈非常精简,并有助于简洁地记录和处理服务器流量周围的任何潜在边缘情况。

结论

在本教程中,您学习了如何为流行的 Web 服务器配置临时和永久重定向。请务必使用正确的重定向类型,因为临时重定向的不当使用可能会损害您的搜索排名。

正确使用重定向将允许您利用当前的网络状态,同时允许您根据需要修改网站结构。如果您想了解有关在 Nginx 中配置重定向的更多信息,您可以阅读如何使用 Nginx 创建临时和永久重定向

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Apache 和 Nginx 创建临时和永久重定向 的相关文章

随机推荐

  • 如何在 Ubuntu 18.04 上安装 PHP

    在本教程中 我们将介绍在 Ubuntu 18 04 上安装发行版的默认 PHP 7 2 并将其与 Nginx 和 Apache 集成所需的步骤 我们还将向您展示如何安装 PHP 7 1 和 7 3 大多数流行的 PHP 框架和应用程序包括W
  • 如何在 Ubuntu 18.04 上使用 Apache 安装 Joomla

    Joomla 是最流行的开源内容管理系统之一 为数十万个网站提供支持 它是用 PHP 编写的 包含大量可以通过免费和高级扩展和主题进行扩展的功能 使用 Joomla 您可以轻松构建电子商务商店 个人网站 社交网站或博客 在本教程中 我们将解
  • 如何在 Ubuntu 20.04 上安装和使用 Wine

    Wine 是一个开源兼容层 允许您在类 Unix 操作系统 例如 Linux FreeBSD 和 macOS 上运行 Windows 应用程序 Wine是 Wine Is Not an Emulator 的缩写 它将 Windows 系统调
  • 如何在 CentOS 8 上安装 Skype

    Skype是世界上最流行的通信应用程序之一 它允许您免费拨打在线音频和视频电话 并以经济实惠的价格拨打全球手机和固定电话 本文介绍如何在 CentOS 8 上安装最新版本的 Skype 在 CentOS 上安装 Skype Skype 不是
  • 如何在 Ubuntu 20.04 上安装 Ruby

    Ruby 是当今最流行的编程语言之一 它具有优雅的语法 注重简单性和生产力 Ruby 是强大的 Ruby on Rails 框架背后的语言 在本教程中 我们将向您展示在 Ubuntu 20 04 上安装 Ruby 的三种不同方法 来自标准
  • 如何在 CentOS 7 上安装 Node.js 和 npm

    Node js 是一个跨平台的 JavaScript 运行时环境 允许服务器端执行 JavaScript 代码 Node js 主要用于后端 但作为全栈和前端解决方案也很受欢迎 npm 是 Node Package Manager 的缩写
  • 如何在 CentOS 8 上安装 Tomcat 9

    Apache Tomcat 是 Java Servlet JavaServer Pages Java 表达式语言和 Java WebSocket 技术的开源实现 它是当今世界上采用最广泛的应用程序和 Web 服务器之一 Tomcat 使用简
  • 如何在 Debian 9 上安装 Asterisk

    Asterisk 是最流行且广泛采用的用于构建通信应用程序的开源框架 它被世界各地的个人 小型企业 大型企业和政府使用 Asterisk 功能包括电话会议 语音邮件 等待音乐 呼叫转接 呼叫排队 呼叫录音 数据库存储 检索等等 在本教程中
  • 如何在 CentOS 7 上安装 Minecraft 服务器

    我的世界 是有史以来最受欢迎的游戏之一 这是一款关于放置方块并进行冒险的沙盒视频游戏 在本教程中 我们将完成在 CentOS 7 上安装和配置 Minecraft 服务器所需的步骤 我们将使用 Systemd 来运行 Minecraft 服
  • 如何在 CentOS 7 上安装 Elasticsearch

    Elasticsearch 是一个开源分布式全文搜索和分析引擎 它支持 RESTful 操作 允许您实时存储 搜索和分析大量数据 Elasticsearch 是最流行的搜索引擎之一 为具有复杂搜索要求的应用程序 例如大型电子商务商店和分析应
  • Linux 中的 Tar 命令(创建和提取档案)

    The tar命令通过将一组文件转换为存档来创建 tar 文件 它还可以提取 tar 存档 显示存档中包含的文件列表 向现有存档添加其他文件以及各种其他类型的操作 Tar 最初设计用于创建档案以将文件存储在磁带上 这就是它得名 的原因 Ta
  • 如何在 Ubuntu 18.04 上启用 SSH

    Secure Shell SSH 是一种加密网络协议 用于客户端和服务器之间的安全连接 在本教程中 我们将向您展示如何在 Ubuntu 桌面计算机上启用 SSH 启用 SSH 将允许您远程连接到 Ubuntu 计算机并安全地传输文件或执行管
  • Spring Boot @SpringBootApplication,SpringApplication 类

    春季启动 SpringBootApplication注解 春季启动 SpringBootApplication注解用于标记一个配置类 该类声明了一个或多个 Bean方法和触发器auto configuration和组件扫描 这与声明一个类相
  • 如何在 Ruby 中使用字符串

    介绍 A string是一个或多个字符的序列 可以由字母 数字或符号组成 Ruby 中的字符串是对象 与其他语言不同 字符串是mutable 这意味着可以就地更改它们 而不用创建新字符串 您几乎会在编写的每个程序中使用字符串 字符串允许您使
  • 有用的 Bash 别名和函数简介

    介绍 在命令行上操作的越多 您就越会发现您使用的大多数命令只是可用命令的很小的子集 大多数任务都是习惯性的 您可能每天都以相同的方式运行这些任务 虽然许多最常见的命令实用程序的制造商试图通过使用缩写名称来消除无关的输入 想想通过输入 ls
  • 在 Ubuntu 14.04 上使用 Consul(服务发现系统)简介

    介绍 Consul是一个分布式 高可用 数据中心感知的服务发现和配置系统 它可用于在灵活而强大的界面中呈现服务和节点 使客户端始终能够了解其所属基础设施的最新视图 Consul 提供了许多不同的功能 用于提供有关您的基础设施的一致且可用的信
  • 如何在 Ubuntu 22.04 上使用 uWSGI 和 Nginx 为 Flask 应用程序提供服务

    介绍 在本指南中 您将使用FlaskUbuntu 22 04 上的微框架 本文的大部分内容将讨论如何设置uWSGI应用服务器以及如何启动应用程序和配置Nginx充当前端反向代理 先决条件 在开始本指南之前 您应该 安装了 Ubuntu 22
  • 如何使用 Nginx、Let's Encrypt 和 Docker Compose 保护容器化 Node.js 应用程序

    介绍 有多种方法可以增强您的灵活性和安全性Node js应用 用一个反向代理 like Nginx为您提供负载平衡请求 缓存静态内容和实施传输层安全 TLS 在服务器上启用加密 HTTPS 可确保与应用程序之间的通信保持安全 在容器上使用
  • Python 中的 numpy.append()

    Python numpyappend 函数用于合并两个数组 该函数返回一个新数组 原数组保持不变 NumPy append 语法 函数语法为 numpy append arr values axis None The arr可以是类似数组的
  • 如何使用 Apache 和 Nginx 创建临时和永久重定向

    介绍 HTTP 重定向或 URL 重定向是一种将一个域或地址指向另一个域或地址的技术 重定向有很多用途 并且需要考虑几种不同类型的重定向 每当站点需要将请求一个地址的人定向到另一个地址时 就会使用重定向 当您创建内容和管理服务器时 您经常会