介绍
HTTP重定向,即URL重定向,是一种将一个域或地址指向另一个域或地址的技术. 重定向有很多用途,还有几种不同的重定向需要考虑. 每当一个站点需要人们要求将一个地址指向另一个地址时,都会使用重定向.
当您创建内容和管理服务器时, 您往往会发现需要将流量从一个地方转向另一个地方 。 本指南将讨论这些技术的不同使用案例,以及如何在Apache和Nginx这两个最常用的网络服务器中完成.
前提条件
- 一个由跟随Ubuntu 20.04初始服务器设置指南而设置的Ubuntu 20.04服务器,包括一个sudo非root用户和一个防火墙.
- Apache 或 Nginx 安装在您的服务器上,您可以通过跟随 [How To Install Apache on Ubuntu 20.04] (https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04) 或 [How To Install Nginx on Ubuntu 20.04] (https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-20-04) 来做到这一点. Apache和Nginx都可以同时被安装,很多堆栈同时使用两个服务器,但默认情况下,它们会与默认的HTTP/HTTPS端口相冲突_80_和_443_,因此如果在股票服务器配置上遵循这个教程,只应该一次安装一个. .
步骤1 – 审查重定向方法
改道有很多使用的案例。 如果你已经建立了网络存在,并且想改变你的域名,那么最好不要仅仅放弃你的旧域名. 如果您的内容消失, 没有给浏览器关于如何找到新位置的任何指示, 访问您的网站的书签和链接将会中断 。 改变域而不改变方向会使您的站点失去以前访客的流量,并失去您努力建立的所有信誉.
通常,登记一个名字的多种变体是有益的,以便让用户在与您主域相类似的地址中输入。 例如,如果你有一个名为myspiders.com'的域名,你还可以购买
myspiders.net'和myspiders.org'的域名,并将这两个域名都引向你的
myspiders.com'站点。 这使得您可以捕捉那些可能试图用错误地址到达您网站的用户. 也可以帮助防止另一个网站使用类似的域名,并从您的网络存在中获利.
有时,需要更改您网站上已经公布和接收流量的页面名称。 通常,这会导致一个404 Not Found 错误,也可能是另一个错误,取决于您的安全设置. 通过引导您的访问者访问另一个包含他们试图访问的正确内容的页面,这些可以避免. 有几种不同的URL重定向,每种都意味着客户端浏览器的不同. 最常见的两种类型是302个临时重定向,301个永久重定向.
临时重定向
临时重定向是有用的, 如果您的网页内容暂时需要从不同位置服务 。 例如,如果您正在进行站点维护,您可能需要将您域名的所有页面临时重定向到一个解释页,以通知您的访问者您将很快回来。
临时重定向告知浏览器,内容暂时位于不同位置,但应继续尝试访问原始URL.
永久重定向
永久性重定向是有用的,当您的内容已永久地移动到一个新的位置. 这是有用的,当您需要更改域名或当URL需要改变其他原因,而旧位置将不再使用时。
强迫SSL
重定向的常见用途是指导所有网站流量使用SSL而不是标准的HTTP。 使用重定向,可以将所有请求的http://www.mysite.com重定向到https://www.mysite.com
。 使用LetsEncrypt提供HTTPS(https://andsky.com/tech/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04)将自动生成这样的重定向配置。
在本教程的下一部分中,您将学习一些使用Apache Web 服务器的重定向的示例配置. 如果您使用的是 Nginx,而无意使用Apache,您可以跳过步骤3。
第2步:如何在Apache中重定向
可以使用mod_alias
模块的工具实现 Straightforward 重定向,也可以使用mod_rewrite
创建更广泛的重定向。
使用重定向指令
在Apache中,可以使用"Rediction"指令执行单页重定向,该指令包含在默认启用的"mod_alias"模块中. 此指令至少需要两个参数:旧的URL和新的URL.
Apache 服务器块可以存储在)。 默认情况下,Apache在/etc/apache2/site-capable/000-default.conf
中安装了单一的站点配置,该配置是启用的,并与/etc/apache2/site-suplied/000-default.conf.
相连.
您可以使用nano
或您最喜欢的文本编辑器打开该配置:
1sudo nano /etc/apache2/sites-available/000-default.conf
默认情况下,它包含一个标准的 Web 服务器配置,它会听到端口 80,并搜索位于您的系统上的 /var/www/html
中的 index.html
文件。
1[label /etc/apache2/sites-available/000-default.conf]
2<VirtualHost *:80>
3# The ServerName directive sets the request scheme, hostname and port that
4# the server uses to identify itself. This is used when creating
5# redirection URLs. In the context of virtual hosts, the ServerName
6# specifies what hostname must appear in the request's Host: header to
7# match this virtual host. For the default virtual host (this file) this
8# value is not decisive as it is used as a last resort host regardless.
9# However, you must set it for any further virtual host explicitly.
10#ServerName www.example.com
11
12ServerAdmin webmaster@localhost
13DocumentRoot /var/www/html
14…
15</VirtualHost>
如果您需要将domain1.com
的请求重定向到domain2.com
,您可以从这个服务器块中删除现有的指令,并用永久重定向取代它们:
1[label /etc/apache2/sites-available/000-default.conf]
2<VirtualHost *:80>
3 ServerName www.domain1.com
4 Redirect / http://www.domain2.com
5</VirtualHost>
6
7<VirtualHost *:80>
8 ServerName www.domain2.com
9 . . .
10 . . .
11</VirtualHost>
保存并关闭文件. 如果您正在使用nano
,请按Ctrl+X
,然后在提示时按Y
,然后输入。
此重定向指示浏览器将所有请求的www.domain1.com
转到www.domain2.com
。
默认情况下,重定向
指令设置了302或临时重定向,如果您想创建永久重定向,您可以通过以下两种方式:
1[label /etc/apache2/sites-available/000-default.conf]
2<VirtualHost *:80>
3 ServerName www.domain1.com
4Redirect 301 /oldlocation http://www.domain2.com/newlocation
5</VirtualHost>
1[label /etc/apache2/sites-available/000-default.conf]
2<VirtualHost *:80>
3 ServerName www.domain1.com
4Redirect permanent /oldlocation http://www.domain2.com/newlocation
5</VirtualHost>
使用 RedirectMatch 指令
要重定向不止一个页面,您可以使用重定向匹配
指令,允许您使用正则表达式指定目录匹配模式。
这将允许您重定向整个目录, 而不仅仅是单个文件 。
RedictionMatch' 与括号中的图案相匹配,然后使用
1 ` 来引用重定向中匹配的文本, 其中 1 是第一组文本 。 随后各组依次给出数字.
例如,如果您想要将每个在/图像
目录中请求的东西匹配到一个名为images.example.com
的子域,您可以使用以下内容:
1[label /etc/apache2/sites-available/default]
2<VirtualHost *:80>
3…
4RedirectMatch ^/images/(.*)$ http://images.example.com/$1
5…
6</VirtualHost>
与重定向
指令一样,您可以通过在 URL 位置规则之前添加重定向代码来指定重定向类型。
为了让您的更改生效,您需要重新启动Apache。 在现代的Ubuntu服务器上,您可以使用systemctl
来执行以下操作:
1sudo systemctl restart apache2
使用 mod_rewrite 重定向
创建重定向规则的最灵活但复杂的方法是使用名为)。
在此教程的下一部分中, 您会学习一些使用 Nginx 网络服务器重定向的示例配置 。 如果您已经安装和配置了 Apache, 在遵循同一服务器上的 Nginx 配置步骤之前, 您需要将端口 80 免费 。 您可以通过暂时卸载 Apache 和 apt remove
来完成此任务, 如果您以后想要重新安装的话, 这将保留您的配置文件, 或者通过更改 Apache 的配置来在 80 以外的端口上监听连接, 端口被 Apache 、 Nginx 和 HTTP 的所有连接默认使用 .
第3步:如何在 Nginx 中重定向
Nginx 中的重定向是核心功能,并使用常见的 Nginx 指令. 通常情况下,您可以通过为每个 URL 创建一个新的服务器块来实现重定向。
Nginx服务器块可以存储在),由您决定启用或禁用。 默认情况下,Nginx在/etc/nginx/sites-captive/default'中安装了单一的站点配置,该配置是启用的,并与
/etc/nginx/sites-captive/default'相连接.
您可以使用nano
或您最喜欢的文本编辑器打开该配置:
1sudo nano /etc/nginx/sites-available/default
默认情况下,它包含一个标准的 Web 服务器配置,它会听到端口 80,并搜索位于您的系统上的 /var/www/html
中的 index.html
文件。
1[label /etc/nginx/sites-available/default]
2server {
3 listen 80 default_server;
4 listen [::]:80 default_server;
5…
6 root /var/www/html;
7
8 # Add index.php to the list if you are using PHP
9 index index.html index.htm index.nginx-debian.html;
10…
11}
如果您需要将domain1.com
的请求重定向到domain2.com
,您可以从这个服务器块中删除现有的指令,并用永久重定向取代它们:
1[label /etc/nginx/sites-available/default]
2server {
3 listen 80;
4 server_name domain1.com;
5 return 301 $scheme://domain2.com$request_uri;
6}
保存并关闭文件. 如果您正在使用nano
,请按Ctrl+X
,然后在提示时按Y
,然后输入。
`返回'指令执行一个 URL 替换,然后返回给予它的状态代码和重定向 URL。
在这种情况下,它使用`$cheme'变量来使用原始请求(https或https)中使用的任何方案。 然后返回301永久重定向代码和新形成的URL.
为了处理一个文件夹重定向到一个单独的子域,可以使用"重写"指令执行类似于Apache文件夹重定向的操作. 该指令被放入服务器块后,将针对"图像"目录内的请求发布临时重定向到子域"images.example.com":
1[label /etc/nginx/sites-available/default]
2server {
3…
4rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
5…
6}
对于永久重定向,您可以在声明末尾将重定向
更改为永久
。
为了让你的更改生效,你需要重新启动 Nginx. 在现代的Ubuntu服务器上,你可以使用systemctl
来做到这一点:
1sudo systemctl restart nginx
您可以以许多其他方式扩展此配置,使用 Nginx 的这些基本知识来生成您想要的服务器配置可以保持您的堆栈非常瘦,并有助于简要地记录和处理您服务器流量周围的任何潜在边缘案例。
结论
在此教程中, 您学会了配置流行的网络服务器的临时和永久方向器 。 务必使用正确的重定向类型,因为不当使用临时重定向会伤害到您的搜索排名.
正确使用重定向将允许您充分利用您目前的网络存在,同时允许您根据需要修改您的网站结构 。 如果您想更多地了解Nginx中的配置方向调整, 您可以读取 [如何与Nginx 创建临时和永久方向调整] (https://andsky.com/tech/tutorials/how-to-create-temporary-and-permanent-redirects-with-nginx)