网址变迁权重不减:301 重定向的黄金法宝

随心笔谈11个月前发布 编辑
205 0

在网络世界中,301 重定向是一个非常重要的概念,它对于网站的流量和搜索引擎优化起着关键作用。

你是否曾经在浏览网页时遇到过链接跳转的情况,或者在搜索引擎中输入一个网址却被自动重定向到另一个页面?这背后可就是301重定向在起作用。301 重定向是一种将网址永久重定向到其他网址的方法。

在本文中,将解释技术背景并向您展示如何使用 htAccess 设置 301 重定向。

为什么需要 301 重定向?

 

301 重定向是最著名的重定向类型。 数字 301 基于 HTTP 状态代码。 状态码 404 表明无法找到所请求的资源,而 300 代码则代表重定向。 通常,您使用 301 重定向来避免 404 错误。

以下是最重要的 HTTP 状态代码的概述:

HTTP 状态代码 描述
200 OK 服务器在请求的地址找到资源并可以将其传回。
301 Moved permanently 所请求地址处的资源已被永久移动,并且服务器已从那里返回该资源。 旧地址不再有效。
302 Found 所请求地址处的资源已暂时移动,服务器已从那里返回该资源。 旧地址将在未来某个时候再次有效。
303 See other 然而,与 302 类似,打开临时地址时仅允许 GET 请求。
307 TempoRARy redirect 与 302 类似,但与 303 不同的是,客户端在打开临时地址时可能会改变 HTTP 方法(GET、POST、PUT 等)。
404 Not found 服务器无法从请求的地址找到任何资源。

为了在网络上查找内容或资源,需要使用网址。 发生内容迁移时,可以找到内容的地址会发生变化。 然而,内容本身却并非如此。 当从 HTTP 切换到 HTTPs 或将站点从一个域移动到另一个域时,通常会出现这种情况。 在优化搜索引擎的链接结构时,地址也可能会发生变化。 在所有这些情况下,您不希望尝试使用旧地址访问内容的用户登陆到空白页面。

如果服务器无法在给定地址找到资源,它将返回 HTTP 404 Not Found 错误。 此类错误往往会惹恼用户,因为他们无法访问他们想要访问的网页。 如果该地址是由网络爬虫而不是人打开的,则 404 错误可能会导致该资源取消索引。 网站运营商会尽力避免这两种情况。

除了更改网页内容的地址之外,301 重定向也是搜索引擎优化 (SEO) 和在线营销的重要组成部分。 301 重定向用于创建搜索友好的 URL 和规范 URL。 URL 缩短器经常用于社交媒体,也源自 301 重定向。

为什么 301 重定向对于 SEO 如此重要? 与 302、303 和 307 重定向不同,301 重定向会将原始地址的“链接汁”转移到新地址。 如果搜索引擎已将此内容编入索引并对其进行正面评价,则该地址在替换为 301 重定向时不会失去其评级。 301 重定向还使复杂的 SEO 策略(例如多域策略)成为可能。

301 重定向如何工作?

 

301 重定向在 Web 服务器和客户端之间的交换期间使用。 服务器告诉客户端所请求的资源在给定的网址 (URL) 上不再可用,并为其提供新的有效地址。 人的浏览器和搜索引擎机器人都可以被视为客户端。

  1. 客户端尝试访问 URL 处的资源。
  2. 服务器以状态代码“301 永久移动”进行响应,并给出新的 URL 作为 HTTP 位置标头。
  3. 客户端将新 URL 保存在其缓存中,这意味着任何进一步尝试访问旧 URL 的行为都会自动定向到新 URL。
  4. 然后客户端尝试从新 URL 访问资源。

我们已经了解了 301 重定向如何在客户端和服务器之间工作。 但是如何在服务器上设置 301 重定向呢? 有不同的方法可以做到这一点,但最常见的方法之一是在 Apache Web 服务器的 htaccess 文件中设置重定向。 为了使其工作,需要打开相应的 Apache 模块:

指令 Apache 模块 描述*
Redirect mod_alias 简单重定向
Rewrite mod_rewrite 复杂重定向

让我们看一下如何在 htaccess 文件中设置简单的 301 重定向。 为此,请使用 mod_alias 模块中的重定向指令。 当您想要将服务器上的 URL 重定向到另一个 URL 时,这些方法非常适合。 模板如下:

网址变迁权重不减:301 重定向的黄金法宝
1
Redirect 301 “/source_path” “target_URL”

接下来,将服务器上的 URL 重定向到另一个内部 URL。 开头的正斜杠表示 URL 路径的开始,即域名后面的部分:

网址变迁权重不减:301 重定向的黄金法宝
1
Redirect 301 “/old.html” “/new.html”

要将其发送到外部 URL,请将外部 URL 添加为目标:

网址变迁权重不减:301 重定向的黄金法宝
1
Redirect 301 “/old.html” “http://example.com/new.html”

使用重定向指令,您还可以为 htaccess 文件中的整个索引定义 301 重定向。 在此示例中,我们将使用“cn”路径组件将所有 URL 重定向到子域。

网址变迁权重不减:301 重定向的黄金法宝
1
Redirect 301 “/cn/” “http://de.example.com/”

同样,我们可以将一个域上的所有 URL 重定向到一个新域:

网址变迁权重不减:301 重定向的黄金法宝
1
Redirect 301 “/” “http://other.example.com/”

如果要重定向具有相似模式的各个地址,可以使用 RedirectMatch 指令。 这样您就不必单独记录重定向。 该指令使用标准表达式来识别模式并从中提取。

网址变迁权重不减:301 重定向的黄金法宝
1
RedirectMatch 301 regex URL

在这里,我们将向您展示一个 RedirectMatch 条目,该条目从 GET 参数中提取文章的类别和 ID,然后将它们重定向到路径。

网址变迁权重不减:301 重定向的黄金法宝
1
RedirectMatch 301 “/article.PHP?cat=(.*)&id=(.*)” “/articles/$1/$2/”

假设我们的域名是 example.com。

URL http://example.com/article.php?cat=web&id=42 将被重定向到 http://example.com/articles//web/42/。

要为高级重定向创建 301 重定向,您可以使用 Apache 重写模块 mod_rewrite 中的重写指令。 这允许您定义和请求重定向条件、设置和读取环境变量以及使用常规术语定义重定向规则。

使用 mod_rewrite,可以链接重定向规则。 该模块将提供类似于迷你编程语言的东西来改革 URL 并执行重定向。 但是,这是您必须小心的事情,因为如果使用不当,可能会导致无限循环。

重写指令以目标“RewriteEngine on”开始,后跟可选的 RewriteCond 条件。 之后是一个或多个 RewriteRule 重定向规则。 可以使用标志来更改重写条件和规则的工作方式,这本质上是不同的选项。 要设置 301 重定向,规则必须包含标志 L,R=301:

网址变迁权重不减:301 重定向的黄金法宝
1
2
3
RewriteEngine on
RewriteCond TestString CondPattern [flags]
RewriteRule URL_path Substitution [L,R=301]

在重定向规则和条件中,您可以从 %{HTTP_HOST}、%{REQUEST_URI} 等形式访问多个标头和服务器变量。这些变量可以由运算符链接并作为函数进行编辑。 这意味着几乎所有所需的重定向都可以执行,即使语法并不完全直观。

让我们看一下使用 mod_rewrite 进行 301 重定向的示例。 我们希望强制使用规范 URL,以避免我们网站上出现重复内容。 这意味着所有 URL 都以 HTTPS 和 www. 开头,无论用户如何打开内容。

我们可以定义两个重定向条件,可以使用 OR 标志链接它们。 第一个条件检查 HTTPS 是否关闭,第二个条件检查域是否缺少前缀“www”。 使用 NC 标志,我们可以关闭大小写字母之间的差异。 如果其中一个条件成立,我们会将其重定向到 https-www。 URL 的版本。 为此,我们使用所有 URL 都访问的通用短语 (.*)。 要在域后面输入它,请使用 $1:

网址变迁权重不减:301 重定向的黄金法宝
1
2
3
4
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

使用 301 重定向有哪些问题和风险?

 

301 重定向是 Web 开发和 SEO 的常用工具。 但是,您必须小心。 如果重定向使用不当,可能会导致很多问题,包括服务器崩溃和搜索引擎排名下降。

htaccess 文件在索引级别配置 Apache Web 服务器。 即使对 htaccess 文件进行最小的错误更改也很容易导致网站离线。 这会导致令人担忧的服务器错误 500 或 wordpress 上的白屏死机。

为了避免这种情况,最好在编辑 htaccess 文件时复制它。 这可以通过命令栏轻松完成。 只需切换到该站点的公共 Web 索引并使用 cp 命令即可:

网址变迁权重不减:301 重定向的黄金法宝
1
cp .htaccess _htaccess

如果 htaccess 文件中的任何更改导致错误,可以将其恢复到原始版本:

网址变迁权重不减:301 重定向的黄金法宝
1
cp a _htaccess .htaccess

重定向很有用,但可能会耗费整个请求-响应周期。 如果使用链式重定向,用户必须等待,这可能会导致跳出率增加。 如果网站连续执行多个重定向,搜索引擎也会对网站进行负面评价。 根据经验,不应设置超过三个重定向。

可能发生的最糟糕的事情是重定向循环,其中两个地址不断地重定向到彼此。 这对用户来说显示为浏览器错误 ERR_TOO_MANY_REDIRECTS,这意味着他们想要访问的资源不再可用。 您应该尝试使用 cURL 测试重定向,以确保获得所需的结果。

不正确地使用 301 重定向可能会成为日后许多令人头疼的问题的根源。 与临时 302、303 和 307 重定向不同,301 重定向告诉客户端将新 URL 保存在其缓存中。 如果您想返回原始 URL,则不会通知客户端。 相反,它将继续尝试连接到新的 URL。 为了解决这个问题,您可以使用临时重定向或将缓存控制值设置为适当的值。

让我们将缓存控制标头设置为一小时。 这确保了以后对重定向目标的更改将被所有客户端接收。

网址变迁权重不减:301 重定向的黄金法宝
1
2
3
ExpiresActive on
ExpiresDefault “access plus 1 hour”
Redirect 301 / https://www.example.com/

如果您使用带有重写指令的高级重定向,则有一个设置缓存控制标头的技巧。 我们可以将环境变量 limitcache 定义为 301 重定向规则的一部分。 最后,我们可以使用环境变量作为条件来设置标头。 这确保了重定向时始终使用正确的标头:

网址变迁权重不减:301 重定向的黄金法宝
1
2
RewriteRule ^.* http://www.example.com/ [L,R=301,E=limitcache:1]
Header always set CacheControl “max-age=3600” env=limitcache

提示
遵循 301 重定向,现在您的浏览器拒绝访问原始地址? 只需将带有 ?foo=bar 的查询字符串附加到旧地址并强制浏览器加载 URL。

301 重定向总结

 

学习了什么是 301 重定向后,我们可以得出以下总结:

  1. 301 重定向是一种 HTTP 状态码,用于指示资源已经永久地移动到了新的位置。
  2. 当一个页面的 URL 发生变化或网站进行重构时,可以使用 301 重定向来将旧的 URL 指向新的 URL,以确保用户和搜索引擎能够顺利访问到相关内容。
  3. 301 重定向对用户体验非常重要,可以帮助他们在访问旧的 URL 时自动跳转到新的地址,减少 404 页面的出现。
  4. 对于搜索引擎优化(SEO)而言,301 重定向可以帮助维持网站在搜索结果中的可见性和排名,因为它将旧 URL 的权重和排名传递给新的地址。
  5. 使用301重定向需要确保设置正确的重定向规则,以避免错误的重定向或者出现无限循环的情况。
  6. 在网站开发和维护过程中,理解和正确应用 301 重定向是非常重要的技巧之一,能够提升网站的用户体验和搜索引擎可识别性。

通过学习 301 重定向,我们能够更好地管理网站的 URL 结构变化,并且为用户和搜索引擎提供良好的访问体验。同时,合理应用 301 重定向还有助于保持网站的 SEO 价值和排名。

© 版权声明

相关文章