前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Apache上配置重定向

如何在Apache上配置重定向

原创
作者头像
何处惹尘埃
发布2018-07-24 16:32:57
6.3K0
发布2018-07-24 16:32:57
举报

简介

HTTP重定向是将一个域名或地址指向另一个域名或地址的方式。有几种不同的重定向,每种重定向都对浏览器造成的影响不同,两种最常见的类型是临时重定向和永久重定向。

如果临时需要从其他位置提供URL,则临时重定向(响应状态代码302Found)非常有用。例如,如果您正在执行网站维护,您可能希望使用从您的域名重定向到其他页面,稍后在访问正常。那么请使用临时重定向

另一种是,永久重定向(响应状态代码301 MovedPermanently)这种重定向会通知浏览器你的原域名已经彻底失效。您的内容已永久移动到新位置时,这种方案适用于域名更改。

您可以通过在服务器配置文件中添加下面的行来在Apache中实现临时重定向:

代码语言:javascript
复制
Redirect /oldlocation http://www.newdomain.com/newlocation

同样,使用下面的代码可以进行永久重定向:

代码语言:javascript
复制
Redirect permanent /oldlocation http://www.newdomain.com/newlocation

本教程将详细介绍如何在Apache中实现各种重定向,并针对特定用例进行一些示例。

准备

要学习本教程,您需要:

  • 安装了Apache的一台服务器,并设置为使用虚拟主机为您的网站提供服务。我建议您使用腾讯云免费开发者专属在线实验平台进行试验。

方案

在Apache中,您可以使用Redirect指令完成简单的单页重定向,该指令包含在mod_alias模块中,该模块默认启用。该指令至少采用两个参数,旧URL新URL,可用于创建临时和永久重定向。

您可以使用服务器配置中的下列行完成临时重定向:

代码语言:javascript
复制
<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,可以使用以下内容:

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName www.domain1.com
    RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>
​
<VirtualHost *:80>
    ServerName www.domain2.com
    . . .
</VirtualHost>

默认情况下,RedirectRedirectMatch指令都会建立临时重定向。如果您想创建永久重定向,可以通过附加permanent指令来实现:

代码语言:javascript
复制
Redirect permanent / http://www.domain2.com
RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1

您还可以使用mod_rewrite模块创建更灵活,更强大的重定向。

下面讨论一些具体的例子。

方案一 、重定向到新的域名

如果你打算使用新的域名,那么最好不要放弃旧域名。我建议你使用重定向功能进行重定向,这样不会损失以前域名带来的流量。也不会对用户使用造成困扰。

在此方案中,我们将配置从domain1.com的旧域到domain2.com的新域的重定向。因为旧域将被删除,并且所有流量应从现在开始进入新域,所以我们将在此处使用永久重定向。

假设您已将您的网站domain1.com在Apache中配置如下所示:

代码语言:javascript
复制
<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上配置如下:

代码语言:javascript
复制
<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永久重定向:

代码语言:javascript
复制
<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.htmlservices.html的产品和服务页面。现在,您决定使用名为offers.html的单个页面替换这两个页面。所以我们需要为products.htmlservices.html配置一个简单的重定向到offers.html

我们假设您的网站配置如下:

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName example.com
    . . .
</VirtualHost>

配置重定向就像使用两个Redirect指令一样简单。

代码语言:javascript
复制
<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_aliasmod_rewrite部分。 更多Linux教程请关注腾讯云+社区


参考文献:《How To Create Temporary and Permanent Redirects with Apache》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 准备
  • 方案
    • 方案一 、重定向到新的域名
      • 方案二、网站页面地址更改,实现重定向
      • 结论
      相关产品与服务
      轻量应用服务器
      轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档