HTTP重定向是将一个域名或地址指向另一个域名或地址的方式。有几种不同的重定向,每种重定向都对浏览器造成的影响不同,两种最常见的类型是临时重定向和永久重定向。
如果临时需要从其他位置提供URL,则临时重定向(响应状态代码302Found)非常有用。例如,如果您正在执行网站维护,您可能希望使用从您的域名重定向到其他页面,稍后在访问正常。那么请使用临时重定向。
另一种是,永久重定向(响应状态代码301 MovedPermanently)这种重定向会通知浏览器你的原域名已经彻底失效。您的内容已永久移动到新位置时,这种方案适用于域名更改。
您可以通过在服务器配置文件中添加下面的行来在Apache中实现临时重定向:
Redirect /oldlocation http://www.newdomain.com/newlocation
同样,使用下面的代码可以进行永久重定向:
Redirect permanent /oldlocation http://www.newdomain.com/newlocation
本教程将详细介绍如何在Apache中实现各种重定向,并针对特定用例进行一些示例。
要学习本教程,您需要:
在Apache中,您可以使用Redirect
指令完成简单的单页重定向,该指令包含在mod_alias
模块中,该模块默认启用。该指令至少采用两个参数,旧URL
和新URL
,可用于创建临时和永久重定向。
您可以使用服务器配置中的下列行完成临时重定向:
<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
表达式引用重定向目标中的匹配文本。在更复杂的示例中,后续匹配的组按顺序给出数字。
例如,如果您想暂时将www.domain1.com
中的每个页面重定向到www.domain2.com
,可以使用以下内容:
<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
模块创建更灵活,更强大的重定向。
下面讨论一些具体的例子。
如果你打算使用新的域名,那么最好不要放弃旧域名。我建议你使用重定向功能进行重定向,这样不会损失以前域名带来的流量。也不会对用户使用造成困扰。
在此方案中,我们将配置从domain1.com
的旧域到domain2.com
的新域的重定向。因为旧域将被删除,并且所有流量应从现在开始进入新域,所以我们将在此处使用永久重定向。
假设您已将您的网站domain1.com
在Apache中配置如下所示:
<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
上配置如下:
<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
永久重定向:
<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
。
为了实现永久重定向,我们只需在RedirectMatch
指令之后添加永久重定向。
注意:请记住使用systemctl restart apache2在配置更改后重新启动Apache。
有时,有必要更改已在网站上发布页面的名称。单独更改名称会导致原始URL出现404 Not Found错误,但您可以通过使用重定向来避免这种情况。
我们假设您的网站分别有两个名为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部分。 更多Linux教程请关注腾讯云+社区。
参考文献:《How To Create Temporary and Permanent Redirects with Apache》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。