dede跳转为何不直接跳转?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 DEDE建站 正文

当用户点击文章标题进入内容页时,并不会直接跳转到 plus/view.php页的真实地址),而是会先经过一个中间页面,这个页面负责记录点击数,然后再跳转到最终的内容页。

dede 跳转 不直接跳转
(图片来源网络,侵删)

这样做的好处是,点击数统计不会影响用户的最终浏览体验,用户最终看到的仍然是正常的文章内容页。

下面我将为您详细解释这个机制、如何配置以及可能遇到的问题和解决方案。


核心机制:中间页面跳转

这个功能主要通过两个文件协同工作:

  1. 列表页/首页的文章链接 (arc.listview.phpindex.php)

    dede 跳转 不直接跳转
    (图片来源网络,侵删)
    • 在文章列表、首页、栏目页等地方,文章的 <a> 标签链接,并不是直接指向 plus/view.php?aid=123
    • 而是指向一个专门用于处理点击跳转的 PHP 脚本,通常是 click.php
  2. 点击处理脚本 (click.php)

    • 当用户点击链接时,浏览器首先请求 click.php
    • click.php 脚本会接收到文章的 ID (aid)。
    • 核心操作:它会连接数据库,找到对应的文章记录,并将 click(点击数)字段的值 +1
    • 跳转操作:完成计数后,它会使用 Header("Location: ...") 函数,将用户重定向(跳转)到真正的文章内容页,即 plus/view.php?aid=123

整个流程是这样的:

用户点击文章链接 → 浏览器访问 click.php?aid=123click.php 数据库 click+1click.php 重定向到 plus/view.php?aid=123 → 浏览器访问 plus/view.php → 显示文章内容。

从用户角度看,他们只经历了一次跳转,并且最终到达了正确的页面,但从技术实现上看,确实存在一个“不直接”的中间步骤。

dede 跳转 不直接跳转
(图片来源网络,侵删)

如何配置和检查

检查文章列表页的链接格式

这是最关键的一步,请用浏览器打开您的网站首页或栏目页,右键点击一篇未访问过,选择“在新标签页中打开链接”。

  • 如果新打开的 URL 是类似 http://您的域名/click.php?aid=123&mid=1 的格式,说明您的点击跳转功能是正常开启的。
  • 如果新打开的 URL 直接就是 http://您的域名/plus/view.php?aid=123,说明您的点击跳转功能没有开启,或者被禁用了。

检查 click.php 文件

请确保您的网站根目录下存在 click.php 文件,这个文件是 DedeCMS 自带的,通常不需要修改,您可以打开它查看内容,它应该大致是这样的逻辑:

<?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
$aid = isset($aid) ? $aid : 0;
if($aid > 0)
{
    $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET click=click+1 WHERE id='$aid' ");
}
// 跳转到真正的文章页
$GetUrl = $cfg_phpurl."/view.php?aid=".$aid;
header("Location: $GetUrl");
exit();
?>

如果文件不存在,请从完整的 DedeCMS 安装包中复制一份到您的网站根目录。

检查模板文件中的标签

DedeCMS 的标签系统是智能的,您在列表页模板中使用的文章链接标签 {dede:field name='arcurl'/},在生成 HTML 时,系统会自动判断是否启用点击跳转,并生成相应的 click.php 链接。

您通常不需要手动修改模板来使用这个功能,只要系统配置正确,标签会自动处理。


常见问题与解决方案

问题1:点击数不增加,但直接跳转到 plus/view.php

原因分析: 这通常意味着 click.php 文件没有被调用,可能的原因有:

  1. 模板被修改:模板中的 {dede:field name='arcurl'/} 被硬编码改成了直接指向 plus/view.php
  2. click.php 文件丢失或损坏
  3. URL 重写规则冲突:如果您开启了伪静态(URL重写),规则可能错误地将 click.php 的请求也重定向走了。
  4. 缓存问题:DedeCMS 或浏览器缓存了旧的 HTML。

解决方案:

  1. 恢复默认模板:检查并恢复使用了 {dede:field name='arcurl'/} 的模板文件到默认状态。
  2. 检查/恢复 click.php:确认 click.php 文件存在且内容完整。
  3. 检查伪静态规则
    • 如果您使用的是 DedeCMS 自带的伪静态规则(.htaccess),请确保没有错误。
    • 如果您使用 Nginx,请检查您的 Nginx 配置文件,确保对 click.php 的请求不会被拦截或重写,一个安全的做法是在 Nginx 配置中明确允许访问 click.php
  4. 清理缓存:在 DedeCMS 后台清理所有缓存(包括文章缓存、模板缓存等),并强制刷新浏览器(Ctrl + F5)。

问题2:点击后出现“白屏”或错误页面

原因分析: 这很可能是 click.php 在执行 header() 跳转之前,有内容(比如空格、换行、PHP 错误信息)已经输出到了浏览器。header() 函数要求在它之前不能有任何输出。

解决方案:

  1. 检查 click.php 文件:用代码编辑器打开 click.php,确保文件开头 <?php 之前没有任何空格、换行或 BOM 头标记,文件末尾 ?> 之后也应该没有任何空格或换行。
  2. 开启 PHP 错误显示:在 click.php 文件开头临时加上 ini_set('display_errors', '1'); error_reporting(E_ALL);,看看是否有具体的错误信息,根据错误信息进行修复。
  3. 检查包含文件:确保 require_once (dirname(__FILE__) . "/include/common.inc.php"); 这一行没有产生任何输出。common.inc.php 文件本身也要确保没有 BOM 头和多余的空行。

问题3:如何关闭这个跳转功能?

如果您不希望使用点击数统计,或者觉得这个跳转影响了性能(虽然影响微乎其微),可以手动关闭。

方法: 修改您网站根目录下的 click.php 文件。 原始代码:

<?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
$aid = isset($aid) ? $aid : 0;
if($aid > 0)
{
    // 下面这行是关键,负责增加点击数
    $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET click=click+1 WHERE id='$aid' ");
}
// 跳转到真正的文章页
$GetUrl = $cfg_phpurl."/view.php?aid=".$aid;
header("Location: $GetUrl");
exit();
?>

修改后的代码(关闭跳转):

<?php
// 直接注释掉或删除下面这两行代码,即可关闭点击数统计和跳转功能
/*
require_once (dirname(__FILE__) . "/include/common.inc.php");
$aid = isset($aid) ? $aid : 0;
if($aid > 0)
{
    $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET click=click+1 WHERE id='$aid' ");
}
$GetUrl = $cfg_phpurl."/view.php?aid=".$aid;
header("Location: $GetUrl");
exit();
*/
?>

修改后,所有指向 click.php 的链接都将失效,页面会显示空白或错误,您需要回到模板文件,将 {dede:field name='arcurl'/} 直接修改为 [field:arcurl/](旧版标签)或者直接使用 plus/view.php?aid=[field:id/] 的形式,让文章链接直接指向内容页。


“Dede 跳转 不直接跳转”是其内置的点击数统计机制,通过 click.php 中间页实现,如果您遇到问题,核心排查思路是:

  1. 确认现象:链接是去 click.php 还是直接去 plus/view.php
  2. 检查文件click.php 文件是否存在、内容是否正确、有无 BOM 头?
  3. 检查模板:模板标签是否被错误修改?
  4. 检查环境:伪静态规则是否冲突?PHP 是否有错误输出?

希望这份详细的解答能帮助您解决问题!

-- 展开阅读全文 --
头像
织梦二级域名如何实现?
« 上一篇 昨天
织梦如何添加到购物车?步骤详解在此!
下一篇 » 昨天

相关文章

取消
微信二维码
支付宝二维码

目录[+]