“重定向过多”,也称为重定向循环,如果请求的网页由于必须遵循无数次重定向以从服务器检索任何内容而无法加载,浏览器将返回错误。重定向循环通常是由服务器端的重定向冲突或 CDN 配置错误引起的。
在这个修复“重定向过多”错误的综合指南中,您将了解可以在哪里配置重定向、重定向循环背后的最常见原因是什么以及如何逐步解决这些问题。
什么是重定向以及它们如何工作?
网站重定向可以定义为在内容交付期间需要采取的步骤,以查找所请求网页的位置。虽然对您而言,使用重定向规则实现的更改似乎只反映了网站地址在地址栏中的显示方式,但您的浏览器会在后台执行一系列操作,以确定在加载任何内容之前来寻找正确的内容及路径。
强制使用 HTTPS、网站的 www 版本或加载另一个域名——重定向广泛用于网站托管,允许您自定义内容交付。有多种方法可以设置域重定向,只要配置正确,浏览器按照您创建的规则就不会出现任何问题。
临时和永久重定向
可以配置两种主要类型的重定向——临时的和永久的。根据遇到的重定向类型,Web 服务器将返回 302 或 301 HTTP 状态代码。
302 HTTP 响应代码显示特定网址被临时重定向到另一个位置。但是,有时当您从网站中删除永久重定向规则但未刷新其缓存时,您会看到遵循临时重定向,这会阻止更改可见。
如果您使用任何类型的缓存解决方案,包括WordPress 缓存插件之一,就会发生这种情况。您的浏览器还将存储您访问的任何网站的缓存版本,其中包括旧的重定向。
永久重定向返回 301 HTTP 状态代码并表明您的网站或其中的某个页面已被永久移动,如果它是重定向到 HTTPS 或网站的 www 版本,并不一定意味着它的位置在文件系统已更改。
拓展阅读:什么是301重定向?如何在WordPress网站创建301重定向?
![重定向过多](https://www.wpdaxue.com/img/2022/10/Too-Many-Redirects-1024x537-1.png)
最常见的重定向是什么?
从 HTTP 到 HTTPS Web 协议和从非 www 到 www 版本的网站重定向是配置的两个最常见的规则。重定向到 HTTPS 可确保使用 SSL 证书加密所有 Web 流量,而重定向到 www 通常用于通过使用 CNAME 记录将内容交付网络与您的网站集成。
HTTP 到 HTTPS
可以配置从 HTTP 到 HTTPS 的重定向,通常称为强制 HTTPS,以确保没有内容通过不安全的 HTTP 连接传递给网站访问者。如果您的网站上安装了有效的 SSL/TLS 证书,您通常不需要手动强制使用 HTTPS,但添加此类重定向可能是处理混合内容的方法之一。
拓展阅读:WordPress在Apache主机下强制HTTP重定向到HTTPS、宝塔面板为WordPress网站添加SSL证书设置https访问
混合内容
网站上的混合内容可以定义为基础 HTML 文件通过 HTTPS 加载但引用的其他资源(包括图像、Javascript 或 CSS 文件)通过 HTTP 传递给访问者的情况。即使您安装了有效的 SSL 证书,如果在网页上识别出混合内容,浏览器仍会显示安全警告。
设置重定向以解决混合内容的问题通常不是最佳解决方案。相反,您应该更新网站数据库中的所有 URL(统一资源定位器)以包含 HTTPS 协议而不是 HTTP。这可以通过使用 WP CLI 提供的搜索替换功能或WordPress 插件手动完成。对于其他内容管理系统,您需要使用数据库管理工具(如 phpMyAdmin)或从命令行运行 MySQL/MariaDB 查询来修改地址。
如果你遇到混合内容错误(图片无法加载、js和css失效等),可以使用Better Search Replace 插件批量将http网址替换为https网址。
可以配置重定向的 3 个主要位置
重定向通常可以在以下三个主要位置之一进行配置:
- 网络服务器配置。Web 服务器使用的全局配置文件包含通常应用于所有托管网站的设置,因此不建议将重定向添加到其中之一。使用为每个网站单独创建的本地配置文件是在服务器端设置重定向的标准。
- 内容管理系统配置。您的内容管理系统将您网站的地址作为常量存储在数据库中,可用于强制 HTTPS 或加载它的 www 版本。
- 内容交付网络配置。您的 CDN 将强制执行其自己的重定向,该重定向将定义如何准确地从源服务器检索内容并将其传递给网站访问者。
Web 服务器配置文件中的重定向
您可以在 Web 服务器将读取的配置文件之一中本地设置重定向规则。当使用 Apache 作为 Web 服务器时,重定向规则通常设置在网站的本地.htaccess 文件中。如果使用 NGINX,则在 NGINX 服务器块中配置重定向,它代表您网站的全局配置。
您可以在下面看到两个可以添加到 .htaccess 的重定向——一个强制使用 HTTPS,另一个将所有 Web 请求发送到网站的 www 版本。需要遵循严格的语法规则,否则如果 Apache 在本地配置文件之一中检测到任何语法错误,您就有可能使您的网站崩溃。
如果您为 WordPress 使用任何重定向插件,它们很可能也会将其重定向写入您的本地 .htaccess 文件。
![Web 服务器配置文件中的重定向](https://www.wpdaxue.com/img/2022/10/Redirects-in-Web-Server-Configuration-Files.png)
拓展阅读:网站管理员和Web开发人员.htaccess入门指南、15个有用的WordPress .htaccess 代码片段
WordPress 配置中的重定向
WordPress 和其他内容管理系统将网站地址放在数据库中,每次请求任何内容时都会加载该设置。该地址代表一个 URL,它由一个域名和一个 Web 协议(HTTP 或 HTTPS)组成。通过更改数据库中的 URL,如果安装了 SSL/TLS 证书,您可以将您的网站重定向到 www 或强制使用 HTTPS。
WordPress 使用 WP_HOME 常量来标识 WordPress 地址设置和 WP_SITEURL 作为站点地址,它们存储在 wp_options 表中作为 siteurl 和 home。WordPress 地址设置是指 WordPress 安装的位置,而站点地址表示您需要在浏览器地址栏中键入以打开您的网站的 URL。
![WordPress 配置中的重定向](https://www.wpdaxue.com/img/2022/10/Redirects-In-WordPress-Configuration.png)
![](https://www.wpdaxue.com/img/2020/04/20200407105255_wpdaxue_com.jpg)
CDN 强制重定向
您的内容交付网络配置定义了它如何通过 HTTP 或 HTTPS 从源服务器检索请求的网页并将其交付给您的网站访问者。确切的过程由选择的加密模式决定。现代内容交付网络提供三种主要的加密类型:
- 完全或端到端加密。端到端加密确保在内容交付的所有阶段都使用 HTTPS。这意味着从浏览器到 CDN 以及从 CDN 到源服务器的所有 Web 请求始终通过 HTTPS 发送。端到端加密需要两个 SSL 证书——一个安装在源服务器上,另一个由 CDN 实现。
- 灵活或部分加密。部分加密强制来自浏览器 CDN 的所有连接通过 HTTPS,而 CDN 将通过 HTTP 连接到源服务器。但是,您的网站在所有浏览器中仍会显示为安全的。
- 没有加密。禁用加密后,内容传输将通过 HTTP 进行,所有浏览器都会在加载您的网站时显示安全警告。
如果 CDN 尝试通过 HTTPS 发起连接,但您的 Web 服务器将 HTTPS 请求重定向到 HTTP,则会创建一个重定向循环,这会导致在您的网站上看到太多重定向错误。
“重定向过多”错误是什么意思?
“重定向过多”,通常称为重定向循环,是一条错误消息,指示在内容交付期间由两个竞争重定向引起的冲突。当识别到重定向循环时,现代浏览器将返回错误的以下变体之一:
- 页面未正确重定向。您可以在 Firefox 中看到此错误消息。
- 页面不工作。ERR_TOO_MANY_REDIRECTS。一旦陷入重定向循环,谷歌浏览器就会显示此错误。
- Safari 无法打开页面,因为发生了太多重定向。这样,Safari 将让您知道在加载网站之前需要解决哪些重定向冲突。
![重定向错误太多](https://www.wpdaxue.com/img/2022/10/Too-Many-Redirects-Error.png)
要修复重定向过多错误,如果是Apache环境,您需要查看在 .htaccess 中配置并由内容管理系统强制执行的重定向,并检查内容交付网络使用的加密模式(如果您使用了一种加密模式)。
导致网站重定向循环的 3 种最常见的错误配置以及如何解决它们
根据WordPress大学的经验,一般重定向过多主要有以下几个方面原因:
- 设置了https,但是ssl证书没有配置或配置不当,或者配置了ssl证书,但是没有正确将网站的网址修改为https域名。可自行参考《宝塔面板为WordPress网站添加SSL证书设置https访问》检查自己哪一步可能错误。
- 使用了某些重定向相关的插件,然后配置不对导致多次重定向,通常可以访问 wp-content/plugins 目录,删除对应的插件即可。
- 配置了CDN服务,但是没有正确配置https或加速域名,这方面要具体问题具体分析,先禁用掉cdn服务,看看是否恢复,确定是CDN导致的,就具体找原因。
有些操作步骤也可以参考《修复WordPress登录重定向循环问题/一直返回登录界面》
以下内容很啰嗦,有需要的朋友也可以仔细看下。
通过所有重定向来识别冲突并不是一件容易的事,特别是如果将一些重定向添加到 Web 服务器的全局配置中,这使得它们可以在服务器范围内应用。但是,有一些非常常见的错误配置不可避免地会导致重定向循环。
在您的网站上看到“重定向过多”的三个最常见原因是:
- 缺少有效的 SSL/TLS 证书。如果您的 SSL 证书已过期或存在任何其他问题,则可能会发生重定向循环,但您的网站仍会尝试强制使用 HTTPS。
- CMS 网站地址设置不正确。如果 WordPress 或其他内容管理系统使用的网站地址设置中指定的协议与配置的其他重定向冲突,则会导致重定向过多错误。
- 选择了错误的 CDN 加密模式。在 CDN 配置中切换到完全加密时,尤其常见的是重定向循环。如果源服务器不满足使用端到端加密的要求,则可能会导致问题。
缺少有效的 SSL/TLS 证书
安装在网站上的有效 CA 签名 SSL/TLS 证书可确保所有网络流量在从服务器传送到浏览器时都经过加密。此外,HTTPS 可能是在服务器级别强制执行的,它可以完美运行,直到您的 SSL 证书过期并且不会自动更新。它可能由于以下原因而发生:
- 未启用自动 SSL/TLS 证书续订。如果 SSL 没有自动更新,您必须订购新证书并安装它。
- SSL 域验证失败。Let’s encrypt 或 Sectigo(提供免费证书的最广泛使用的 SSL 提供商之一)实施不同的挑战来验证您是否控制了需要为其颁发新证书的域名。如果域验证失败,在您解决阻止验证请求的问题之前,不会安装新证书。
- 根证书或其中一个中间证书已过期。发生这种情况时,一旦 SSL 提供商解决了他们的问题,您将需要重新安装您的证书。
如何解决
使用SSL 检查器检查您的网站是否安装了有效证书。如果它已过期或 SSL 检查器显示任何其他问题,请重新安装证书。如果 Let’s Encrypt 或 Sectigo 未能颁发免费证书,您将需要检查可能阻止验证请求的原因。
![SSL 测试结果](https://www.wpdaxue.com/img/2022/10/SSL-Test-Results.png)
SSL 域验证失败的原因之一是集成了内容交付网络,特别是如果上次 Let’s Encrypt 或 Sectigo 颁发证书时,您还没有配置它。如果您需要安装新的免费 SSL 证书,请暂停 CDN,以便您的网站直接指向服务器,返回其主 IP 地址,而不是属于内容分发网络的 IP 地址。这样,您可以在源服务器上更新证书以继续使用端到端加密。
CMS 网站地址设置不正确
WordPress 和所有其他内容管理系统可以通过将您网站的地址存储在数据库中并在每次请求任何内容时加载它来强制重定向到 HTTPS 或 www。如果站点地址设置设置不正确(使用错误的协议或域名),则会导致问题,包括看到过多的重定向错误。
如何解决
如果您安装了 SSL 证书,尤其是在 CDN 配置确保端到端加密的情况下,请在 WordPress 地址和站点地址设置中使用 HTTPS。如果您将您的网站重定向到 www 版本,WP_SITEURL 和 WP_HOME 都需要修改为一样。
打开 WordPress 仪表板的常规设置菜单并更正分配给 WordPress 地址和站点地址的值。单击保存更改以让 WordPress 修改数据库中的设置。
![](https://www.wpdaxue.com/img/2022/10/General-Settings.png)
选择了错误的 CDN 加密方式
如果你网站没有使用CDN服务,可以不考虑此类情况。
源服务器上配置的重定向与 CDN 使用的加密模式之间不能有任何冲突,否则您将在尝试在任何浏览器中加载您的网站时看到“重定向过多”错误。确保选择更适合您网站需求的正确加密模式。
由于内容交付网络(CDN)始终对其服务器和浏览器之间的流量进行加密,除非您完全禁用加密,否则您可以选择不在源服务器上安装 SSL。选择部分加密并确保您不在服务器级别强制使用 HTTPS,以避免通过 HTTP 接受来自 CDN 的请求时出现任何问题。
如果选择端到端加密,则应在源服务器上安装有效的 SSL 证书,以便 CDN 可以通过 HTTPS 连接。除非您可以手动安装新证书,否则每次需要更新 SSL 时,请暂时暂停您的 CDN 以避免域验证出现任何问题。
如何解决
查看您当前的设置并决定需要选择哪种加密模式。切换到另一种加密类型以修复您网站上的“重定向过多”错误,该错误是由源服务器上的重定向冲突或支持端到端加密所需的 SSL 导致的。
![](https://www.wpdaxue.com/img/2022/10/SSL-TLS.png)
如何通过 3 个步骤修复“重定向过多”
在以下步骤中,您将学习如何识别冲突的重定向并快速修复您网站上的重定向循环。
此方法对操作者的技术要求有些高,而且是针对服务器的,不适用于虚拟主机和小白用户。
步骤 1. 检查您网站的重定向路径
许多消息来源建议清除浏览器缓存作为解决重定向循环问题的第一步。但是,与任何其他错误一样,它只有在服务器上已解决问题时才有效,但浏览器仍将您网站的损坏版本存储在其缓存中。通常,在对您的网站进行任何更改后,您可能希望刷新其缓存以查看它们的反映。
修复“重定向过多”的第一步是按照您网站的重定向路径查看浏览器卡住的确切位置。最好的方法是使用重定向检查器之一。
所有或大多数重定向检查器都使用 cURL,这是一个很棒的命令行工具,用于使用各种网络协议传输数据。我们可以使用它来获取 HTTP 标头信息,这将向您显示尝试加载网站后究竟发生了什么。
通过 SSH 连接到服务器后,将以下简单的 Bash 脚本保存到名为 redirects.sh 的文件中。通过运行 chmod +x redirects.sh 使其可执行。
![](https://www.wpdaxue.com/img/2022/10/chmod.png)
通过将脚本传递给您网站的域名来运行该脚本。例如:./redirects.sh mywebsite.com
步骤 2. 识别冲突的重定向
检查运行上述脚本的输出。当浏览器放弃遵循冲突规则时,它将告诉您哪种重定向会导致出现“重定向过多”。在下面的输出中,我们可以看到来自 HTTP 和 HTTPS 的无限重定向。
![](https://www.wpdaxue.com/img/2022/10/redirects.sh_.png)
请注意每个重定向的返回状态代码。永久重定向通常来自网站的 .htaccess 文件,而临时重定向通常在网站代码中生成,因此它们由 WordPress 或您使用的其他内容管理系统控制。
步骤 3. 解决重定向循环
根据您确定的冲突重定向规则,您将知道在哪里循环它们。正如我们所讨论的,需要检查三项主要内容 – 您的本地 .htaccess 文件、CMS 存储在您网站数据库中的网站地址设置,以及在 CDN 配置中选择的加密模式。
如果在您的网站尝试在 HTTP 和 HTTPS 之间进行重定向时发生重定向循环,请检查您是否安装了有效的 SSL/TLS 证书以及在您的 CDN 配置中选择了哪种加密模式(如果您与您的网站有任何集成)。检查为您的网站指定并存储在 WordPress 数据库中的站点地址和 WordPress 地址。
按照指南上一部分中提供的说明解决常见的错误配置并修复您网站上的“重定向过多”。
总结
当浏览器由于随后的大量重定向而无法加载任何内容时,您的网站上会出现“重定向过多”错误消息,也称为重定向循环。要修复重定向循环,您需要解决重定向路径中存在的冲突。