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,因此,如果您在库存服务器配置上遵循本教程,则一次应该只安装一个。
重定向有很多用例。如果您已经建立了网站并想要更改您的域名,最好不要放弃您的旧域名。如果您的内容消失而没有向浏览器提供有关如何找到其新位置的任何说明,则您网站的书签以及位于整个互联网其他页面上的网站链接将会损坏。更改域名而不重定向将导致您的网站失去以前访问者的流量,并失去您努力建立的所有可信度。
通常,注册名称的多个变体会很有帮助,以便从输入与您的主域类似的地址的用户中受益。例如,如果您有一个名为myspiders.com
,您也可以购买以下域名myspiders.net
and myspiders.org
并将它们重定向到您的myspiders.com
地点。这使您可以捕获可能尝试使用错误地址访问您网站的用户。它还可以帮助防止其他网站使用类似的域并从您的网站中获利。
有时,有必要更改网站上已发布并收到流量的页面的名称。通常,这会导致 404 Not Found 错误或可能另一个错误,具体取决于您的安全设置。通过将访问者引导到包含他们试图访问的正确内容的另一个页面,可以避免这些问题。 URL 重定向有几种不同的类型,每种类型对于客户端浏览器来说都有不同的含义。最常见的两种类型是 302 临时重定向和 301 永久重定向。
如果您的某个 URL 的 Web 内容暂时需要从其他位置提供,则临时重定向非常有用。例如,如果您正在执行站点维护,您可能需要将您的域的所有页面临时重定向到说明页面,以通知访问者您很快就会回来。
临时重定向通知浏览器内容暂时位于不同位置,但它们应继续尝试访问原始 URL。
当您的内容已永久移动到新位置时,永久重定向非常有用。
当您需要更改域或由于其他原因需要更改 URL 并且旧位置将不再使用时,这非常有用。此重定向通知浏览器不应再请求旧 URL,并应更新其信息以指向新 URL。
重定向的常见用途是引导所有站点流量使用 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。
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
或您最喜欢的文本编辑器:
-
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
匹配括号中的模式,然后使用“$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
:
-
sudosystemctl 重新启动 apache2
创建重定向规则最灵活但最复杂的方法是使用名为mod_rewrite
。有关合作的信息mod_rewrite
,参考如何使用 Apache 的 mod_rewrite 重写 URL.
在本教程的下一部分中,您将学习一些使用 Nginx Web 服务器进行重定向的示例配置。如果您已经安装并配置了 Apache,则需要先释放端口 80,然后才能在同一服务器上执行 Nginx 的配置步骤。您可以通过暂时卸载 Apache 来完成此操作apt remove
,如果您以后想要重新安装它,它将保留您的配置文件,或者通过更改 Apache 的配置来侦听 80 以外的端口上的连接,默认情况下,Apache、Nginx 和所有 HTTP 连接都使用该端口。
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
或您最喜欢的文本编辑器:
-
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
:
-
sudosystemctl 重新启动 nginx
您可以通过许多其他方式扩展此配置。使用 Nginx 的这些基础知识来生成所需的服务器配置可以使您的堆栈非常精简,并有助于简洁地记录和处理服务器流量周围的任何潜在边缘情况。
在本教程中,您学习了如何为流行的 Web 服务器配置临时和永久重定向。请务必使用正确的重定向类型,因为临时重定向的不当使用可能会损害您的搜索排名。
正确使用重定向将允许您利用当前的网络状态,同时允许您根据需要修改网站结构。如果您想了解有关在 Nginx 中配置重定向的更多信息,您可以阅读如何使用 Nginx 创建临时和永久重定向