URL HTTP 重定向 是从一个 URL 自动跳转到另一个 URL 的操作。
URL 页面重定向 是从一个 URL 自动跳转到另一个 URL 的操作。
进行这种重定向的原因如下:
用户可能通过旧的外部链接或书签访问到旧的 URL。
由网站管理员通过添加脚本来实现。
服务器端重定向在服务器上完成,通过配置 Apache / IIS 服务器软件或使用 PHP / ASP / ASP.NET 脚本实现。
这是重定向 URL 的首选方法,因为您可以返回 HTTP 301 永久移动状态码。
搜索引擎使用 301 状态码将旧 URL 的页面权重转移到新 URL。
客户端重定向在用户的网页浏览器中完成,通过使用 HTML meta refresh 标签或 Javascript 代码实现。
客户端重定向不太受推荐,因为它不返回 HTTP 301 状态码。
| 域名 | 托管 服务器 |
重定向代码 放置位置 |
|---|---|---|
| 未更改 | 未更改 | 同一服务器上的旧页面 |
| 未更改 | 已更改 | 新服务器上的旧页面 |
| 已更改 | 未更改 | 同一服务器上的旧页面 |
| 已更改 | 已更改 | 旧服务器上的旧页面 |
* 仅适用于 .htaccess 重定向:将重定向代码添加到 httpd.conf 文件或 .htaccess 文件中。
| 状态码 | 状态码名称 | 描述 |
|---|---|---|
| 200 | OK | 成功的 HTTP 请求 |
| 300 | Multiple Choices | |
| 301 | Moved Permanently | 永久 URL 重定向 |
| 302 | Found | 临时 URL 重定向 |
| 303 | See Other | |
| 304 | Not Modified | |
| 305 | Use Proxy | |
| 307 | Temporary Redirect | |
| 404 | Not Found | URL 未找到 |
HTTP 301 永久移动 状态码表示永久 URL 重定向。
301 重定向是重定向 URL 的首选方法,因为它告知搜索引擎该 URL 已永久移动,搜索引擎应在搜索结果中显示新 URL 页面而非旧 URL 页面,并将旧 URL 页面的页面权重转移给新 URL 页面。
301 重定向可以在不同域名之间进行,也可以在同一个域名内进行。
Google 推荐 使用 301 重定向。
| 重定向脚本 | 重定向端 | 旧页面文件类型 | 重定向 URL 或域名 | 旧 URL 服务器类型 | 301 重定向支持 |
|---|---|---|---|---|---|
| PHP | 服务器端 | .php | URL | Apache / Linux | 是 |
| ASP | 服务器端 | .asp | URL | IIS / Windows | 是 |
| ASP.NET | 服务器端 | .aspx | URL | IIS / Windows | 是 |
| .htaccess | 服务器端 | 全部 | URL / 域名 | Apache / Linux | 是 |
| IIS | 服务器端 | 全部 | URL / 域名 | IIS / Windows | 是 |
| HTML canonical link 标签 | 客户端 | .html | URL | 全部 | 否 |
| HTML meta refresh | 客户端 | .html | URL | 全部 | 否 |
| HTML frame | 客户端 | .html | URL | 全部 | 否 |
| Javascript | 客户端 | .html | URL | 全部 | 否 |
| jQuery | 客户端 | .html | URL | 全部 | 否 |
重定向脚本 - 用于重定向的脚本语言。
重定向端 - 重定向发生的位置 - 服务器端 或 客户端。
旧页面文件类型 - 可以包含重定向代码脚本语言的旧 URL 页面的类型。
重定向 URL 或域名 - 是否支持单个网页的 URL 重定向或整个网站的 域名 重定向。
典型旧 URL 服务器类型 - 服务器的典型软件和操作系统。
301 重定向支持 - 指示是否可以返回永久性 301 重定向状态响应。
将 old-page.php 的代码替换为重定向到 new-page.php 的代码。
old_page.php:
<?php
// PHP 永久 URL 重定向
header("Location: http://www.mydomain.com/new-page.php", true,
301);
exit();
?>
旧页面必须具有 .php 文件扩展名。
新页面可以是任何扩展名。
参见:PHP 重定向
.htaccess 文件是 Apache 服务器的本地配置文件。
如果您有权更改 httpd.conf 文件,最好将 Redirect 指令添加到 httpd.conf 中,而不是 .htaccess 文件中。
从 old-page.html 永久重定向到 new-page.html。
.htaccess:
Redirect 301 /old-page.html http://www.mydomain.com/new-page.html
将所有域名页面永久重定向到 newdomain.com。
.htaccess 文件应位于旧网站的根目录。
.htaccess:
Redirect 301 / http://www.newdomain.com/
old-page.asp:
<%@ Language="VBScript" %>
<%
' ASP 永久 URL 重定向
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.mydomain.com/new-page.html"
Response.End
%>
old-page.aspx:
<script language="C#" runat="server">
// ASP.net 永久 URL 重定向
private void Page_Load(object sender, EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.mydomain.com/new-page.html");
Response.End();
}
</script>
HTML meta refresh 标签重定向不返回 301 永久重定向状态码,但被 Google 视为 301 重定向。
将旧页面替换为重定向代码,并指定您想要重定向到的页面的 URL。
old-page.html:
<!-- HTML meta refresh URL 重定向 -->
<html>
<head>
<meta http-equiv="refresh"
content="0; url=http://www.mydomain.com/new-page.html">
</head>
<body>
<p>该页面已移动到:
<a href="http://www.mydomain.com/new-page.html">此页面</a></p>
</body>
</html>
参见:HTML 重定向
Javascript 重定向不返回 301 永久重定向状态码。
将旧页面替换为重定向代码,并指定您想要重定向到的页面的 URL。
old-page.html:
<html>
<body>
<script type="text/javascript">
// Javascript URL 重定向
window.location.replace("http://www.mydomain.com/new-page.html");
</script>
</body>
</html>
jQuery 重定向实际上是另一种类型的 Javascript 重定向。
jQuery 重定向不返回 301 永久重定向状态码。
将旧页面替换为重定向代码,并指定您想要重定向到的页面的 URL。
old-page.html:
<!DOCTYPE html>
<html>
<body>
<script src="https://cdn.staticfile.net/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
//
jQuery URL 重定向
$(document).ready( function() {
url = "http://www.mydomain.com/new-page.html";
$( location ).attr("href",
url);
});
</script>
</body>
</html>
参见:jQuery 重定向
Canonical link 不会重定向到首选 URL,但对于大部分流量来自搜索引擎的网站,它可以作为 URL 重定向的替代方案。
当存在多个内容相似的页面,并且您想告诉搜索引擎您希望在搜索结果中使用哪个页面时,可以使用 HTML canonical link 标签。
Canonical link 标签可以链接到同一域名,也可以跨域链接。
将 canonical link 标签添加到旧页面,以链接到新页面。
将 canonical link 标签添加到您不希望获得搜索引擎流量的页面,以链接到首选页面。
Canonical link 标签应添加在 <head> 部分。
old-page.html:
<link rel="canonical" href="http://www.mydomain.com/new-page.html">
在 frame 重定向中,new-page.html 文件通过 HTML 框架显示。
这不是真正的 URL 重定向。
Frame 重定向对搜索引擎不友好,不推荐使用。
old-page.html:
<!-- HTML frame 重定向 -->
<html>
<head>
<title>新页面标题</title>
</head>
<frameset cols="100%">
<frame src="http://www.mydomain.com/new-page.html">
<noframes>
<a href="http://www.mydomain.com/new-page.html">链接到新页面</a>
</noframes>
</frameset>
</html>