问题核心:为什么会发生重定向循环?

服务器告诉浏览器:“请去 A 页面”,浏览器访问 A 页面,服务器又告诉它:“请去 B 页面”,浏览器访问 B 页面,服务器又让它回到 A 页面……如此反复,浏览器不堪其扰,就停止了并报告错误。

dedecms 此网页包含重定向循环
(图片来源网络,侵删)

在 Dedecms 中,这通常由以下几个原因引起,按常见程度排序:


常见原因与解决方案

.htaccess 文件配置错误(最常见)

.htaccess 文件是 Apache 服务器的配置文件,用于控制网站的 URL 重写、访问权限等,Dedecms 默认会开启伪静态(URL 重写),这依赖于 .htaccess 文件,如果这个文件配置不当,极易导致重定向循环。

症状: 访问首页正常,但访问任何栏目页、文章页都提示“重定向循环”。 或者,整个网站所有页面都提示重定向循环。

解决方案:

dedecms 此网页包含重定向循环
(图片来源网络,侵删)
  1. 找到并打开 .htaccess 文件 这个文件位于你的网站根目录()下,如果你看不到它,可能是因为它被隐藏了,需要在 FTP/SFTP 客户端或文件管理器中设置显示隐藏文件。

  2. 检查并修改配置 打开 .htaccess 文件,找到类似下面的 RewriteRule 规则,问题的根源往往在于规则的开头路径不正确。

    错误的 .htaccess 示例:

    # 如果你的网站根目录是 /wwwroot/mywebsite,但规则写成了 /blog
    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteRule ^(.*)$ /blog/index.php/$1 [L]
    </IfModule>

    如果你的网站实际安装在 mywebsite 目录下,但规则却指向了 /blog,那么每次请求都会被错误地重定向到 /blog/index.php,而这个路径下可能没有 Dedecms,又会重定向回来,形成循环。

    dedecms 此网页包含重定向循环
    (图片来源网络,侵删)

    正确的 .htaccess 示例(适用于安装在根目录):

    <IfModule mod_rewrite.c>
      RewriteEngine On
      # 确保这里的 RewriteBase 是正确的
      # 如果网站在根目录,/
      # 如果在子目录 /blog,/blog
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
    </IfModule>
  3. 修正 RewriteBase

    • 网站安装在根目录: RewriteBase /
    • 网站安装在子目录(如 http://yourdomain.com/dedecms/): RewriteBase /dedecms/
  4. 使用 Dedecms 自带的 .htaccess 最稳妥的方法是删除当前的 .htaccess 文件,然后登录你的 Dedecms 后台。

    • 进入 “系统” -> “系统基本参数” -> “核心设置”。
    • 找到 “是否使用伪静态” 选项,确保它是“是”。
    • 保存设置,Dedecms 会自动在根目录生成一个全新的、配置正确的 .htaccess 文件。

网站安装在子目录,但路径配置错误

这是另一个非常常见的原因,很多用户会将 Dedecms 安装在 wwwpublic_html 下的一个子目录(如 /blog),但网站的“网站根目录”设置仍然是 。

症状: 只有部分页面(如根目录下的 index.php)能访问,所有包含路径的页面(栏目、文章)都重定向循环。

解决方案:

  1. 登录 Dedecms 后台。
  2. 进入 “系统” -> “系统基本参数” -> “核心设置”。
  3. 找到 “站点根目录” 或 “网站路径” 这一项。
  4. 将这里的值修改为你的实际安装目录。
    • 如果安装在根目录,保持 不变。
    • 如果安装在 /dedecms 目录下,就修改为 /dedecms/
  5. 保存设置,这会影响系统生成的所有链接,确保它们指向正确的路径。

Cookie 或浏览器缓存问题

错误的 Cookie 信息或过期的缓存也会导致浏览器在登录或特定操作时陷入重定向循环。

解决方案:

  1. 清除浏览器缓存和 Cookie:

    • 尝试使用浏览器的“无痕模式”或“隐私模式”访问网站,看问题是否解决,如果解决,说明是缓存或 Cookie 的问题。
    • 清除当前网站的缓存和 Cookie,然后重新尝试。
  2. 检查 Cookie 域名:

    • 登录 Dedecms 后台,进入 “系统” -> “系统基本参数” -> “核心设置”。
    • 检查 “Cookie 前缀” 和 “Cookie 保存路径” 是否正确,通常保持默认即可,如果之前修改过,可以尝试恢复默认。

PHP Session 或服务器配置问题

在极少数情况下,服务器的 session.save_path 配置不正确,或者 PHP 的 session.auto_start 选项开启,也可能导致登录后页面重定向。

解决方案:

  1. 检查 php.ini 文件:

    • 确认 session.auto_start = Off,如果它被设置为 On,可能会导致一些框架或系统(包括 Dedecms)的会话管理冲突。
    • 确认 session.save_path 指向一个服务器上存在且可写的目录。
  2. 检查服务器 Session 目录权限:

    • 确保 PHP Session 文件存储的目录(通常是 /tmp)有正确的读写权限。

排查步骤总结(从简到繁)

当你遇到这个问题时,可以按照以下步骤一步步排查:

  1. 第一步:检查浏览器和缓存。

    切换到无痕模式访问,如果正常,则清除缓存和 Cookie。

  2. 第二步:检查 .htaccess 文件。

    • 这是最可能的原因,检查 RewriteBase 是否正确,或者直接删除它,让 Dedecms 后台重新生成一个。
  3. 第三步:检查网站路径设置。

    登录后台,检查 “系统基本参数” -> “核心设置” 中的 “站点根目录” 是否与你的实际安装目录一致。

  4. 第四步:检查服务器配置。

    • 如果以上都无效,联系你的主机服务商,检查 php.ini 中的 session.auto_start 选项和 Session 目录权限。

绝大多数情况下,问题都出在前两步,希望这些信息能帮助你快速解决问题!