介绍
HTTP重定向的方式指向一个域或地址到另一个。有几种不同类型的重定向,每种都对客户端浏览器意味着不同。两种最常见的类型是临时重定向和永久重定向。 如果一个URL暂时需要从不同的位置提供 临时重定向是有用的。例如,如果您正在执行网站维护,则可能希望使用从您的域到解释页面的临时重定向,以通知您的访问者您很快就会回来。 永久重定向 ,而另一方面,通知它应该完全忘记旧的地址,而不是试图再访问该浏览器。当您的内容被永久移至新位置时(例如更改域名时),这些功能很有用。 您可以通过在服务器配置文件中的虚拟主机条目中添加如下行,在Apache中创建临时重定向:Redirect /oldlocation http://www.newdomain.com/newlocation
同样,使用这样的行作为永久重定向:
Redirect permanent /oldlocation http://www.newdomain.com/newlocation
本指南将涵盖如何在Apache中实现每种重定向的更深入的解释,并通过一些特定用例的示例。
先决条件
要遵循本教程,您需要:- 安装了Apache 2的一个服务器,并设置为使用虚拟主机提供您的网站。您可以通过以下做如何在Ubuntu 16.04设置Apache虚拟主机 , 在CentOS 7 ,或在Debian 7 。
解决方案一览
在Apache中,你可以完成简单的单页面重定向使用Redirect
指令,其中包括中
mod_alias
是默认启用一个新的Apache安装模块。此指令至少需要两个参数,即旧网址和新网址,可用于创建临时和永久重定向。 在最简单的形式中,您可以在服务器配置中使用以下行完成临时重定向:
使用重定向进行临时重定向
<VirtualHost *:80>
ServerName www.domain1.com
Redirect / http://www.domain2.com
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.com
. . .
</VirtualHost>
这重定向指示浏览器直接为所有请求
www.domain1.com
到
www.domain2.com
。然而,此解决方案仅适用于单个主页,而不适用于整个站点。 要重定向多单页多,你可以用
RedirectMatch
指令,它使用
正则表达式来指定整个目录,而不只是单个文件。
RedirectMatch
正则表达式模式匹配的括号,然后引用了使用重定向目标匹配的文本
$1
的表达,其中
1
是匹配的文本的第一集团。在更复杂的示例中,后续的匹配组按顺序给出。 例如,如果你想在每一页临时重定向
www.domain1.com
到
www.domain2.com
,可以使用下列内容:
使用RedirectMatch进行临时重定向
<VirtualHost *:80>
ServerName www.domain1.com
RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.com
. . .
</VirtualHost>
默认情况下,
Redirect
和
RedirectMatch
指令建立一个临时的重定向。 如果你想创建一个永久重定向,你可以通过附加这样做
permanent
要么该指令:
永久重定向
Redirect permanent / http://www.domain2.com
RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1
您也可以创建一个更加灵活和强大的重定向
mod_rewrite
模块。 这是本文的范围之外,但你可以开始使用
mod_rewrite
中
如何设置的mod_rewrite为Apache 。 让我们继续一些具体的例子。
示例1 - 移动到不同的域名
如果您已建立网站,并想将网域变更为新的地址,最好不要放弃旧网域。如果您的内容在没有任何有关如何找到其新位置的浏览器指示的情况下消失,您的网站的书签和网站的其他网页的链接将会中断。更改网域而不重定向会导致您的网站失去以前访问者的流量。 在这个例子中,我们将配置从被称为旧域名重定向domain1.com
来新建一个名为
domain2.com
。我们将在此处使用永久重定向,因为旧域名将被删除,所有流量应从现在开始到新域名。 让我们假设你有你的网站配置为通过所谓的单域担任
domain1.com
已经在Apache的配置如下:
/etc/apache2/sites-available/domain1.com.conf
<VirtualHost *:80>
ServerAdmin admin@domain1.com
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/domain1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我们还假设你已经在服务你将来的版本的网站
domain2.com
:
/etc/apache2/sites-available/domain2.com.conf
<VirtualHost *:80>
ServerAdmin admin@domain2.com
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /var/www/domain2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
让我们改变了
domain1.com
虚拟主机配置文件,添加一个永久重定向到
domain2.com
:
/etc/apache2/sites-available/domain1.com.conf
<VirtualHost *:80>
ServerAdmin admin@domain1.com
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/domain1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RedirectMatch permanent ^/(.*)$ http://domain2.com/$1
</VirtualHost>
我们添加使用上述重定向
RedirectMatch
指令。 我们使用
RedirectMatch
,而不是一个简单的
Redirect
,以确保所有的网页会得到影响,不仅主页。 该
^/(.*)$
正则表达式匹配后的一切
/
在URL中。 例如,
http://domain1.com/ index.html
将被重定向到
http://domain2.com/ index.html
。 为实现永久重定向,我们只需添加
permanent
后
RedirectMatch
指令。
注意:请记住使用配置更改后重新启动Apache systemctl restart apache2
。
示例2 - 创建持久化体验,单页名更改
有时,您必须更改已发布并在您的网站上获得流量的各个网页的名称。仅更改名称会导致尝试访问原始网址的访问者发生404未找到错误,但您可以通过使用重定向避免此错误。这样可确保将您的旧网页添加为书签或通过搜索引擎上的过时链接找到的网页仍然会到达正确的网页。 让我们想象一下你的网站有产品和服务的分别两个单独的页面products.html
和
services.html
。 现在,你已经决定更换这两个页面与被称为单一报价页面
offers.html
代替。 我们将配置一个简单的重定向
products.html
和
services.html
到
offers.html
。 我们假设您的网站配置如下:
假定的原始虚拟主机配置
<VirtualHost *:80>
ServerName example.com
. . .
</VirtualHost>
配置重定向是使用两个简单
Redirect
指令。
重定向添加到原始配置
<VirtualHost *:80>
ServerName example.com
Redirect permanent /products.html /offer.html
Redirect permanent /services.html /offer.html
. . .
</VirtualHost>
所述
Redirect
指令接受具有被重定向原来的地址,以及一个新页的目的地地址。 由于这里的变化不是暂时的,我们使用
permanent
的指令也是如此。您可以使用尽可能多的重定向,如您希望确保您的访问者在移动网站内容时不会看到不必要的未找到错误。
结论
您现在有知识将请求重定向到新位置。请务必使用正确的重定向类型,因为不当使用临时重定向会损害您的搜索排名。 有HTTP多种其他用途重定向,包括强迫安全SSL连接(即使用https
而不是
http
),并确保所有游客最终将只在
www.
网站的前缀地址。 正确使用重定向将允许您利用您当前的网络呈现,同时允许您根据需要修改网站结构。如果您想了解更多,你可以重定向访问者的方式,Apache对在主题丰富的文档
启用mod_alias和
mod_rewrite正式文件的部分。