dede 伪静态目录如何配置?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文
  1. 后台开启伪静态功能
  2. 修改 include/helpers/channelunit.helper.php 文件 (这是最关键的一步,用于处理栏目/目录的链接)
  3. 配置服务器的重写规则 (根据你的服务器类型选择)

第一步:在 DedeCMS 后台开启伪静态

这是所有伪静态设置的基础。

dede 伪静态 目录
(图片来源网络,侵删)
  1. 登录你的 DedeCMS 后台。
  2. 进入 系统 -> 系统基本参数
  3. 在左侧菜单选择 核心设置
  4. 找到 是否使用伪静态 这一选项,将其值设置为 “是”
  5. 点击 确定 保存。

第二步:修改 channelunit.helper.php 文件 (核心步骤)

DedeCMS 默认生成的栏目链接是 plus/list.php?tid=1 这样的形式,我们需要修改核心文件,让它直接生成我们想要的目录式链接,如 分类目录/分类名称.html

这个文件位于 /include/helpers/channelunit.helper.php

操作方法:

  1. 使用 FTP 或文件管理器,下载 /include/helpers/channelunit.helper.php 文件到你的电脑。

  2. 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开它。

  3. 找到 GetListUrl() 函数,这是生成列表页链接的核心函数。

  4. 找到并替换以下代码:

    在文件中搜索类似这样的代码块:

    // 旧代码 (大约在第 25-35 行,不同版本行号可能略有差异)
    if($typeid>0)
    {
        $reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid;
        if($totalpage > 1)
        {
            $reurl .= "&totalresult={$totalresult}&PageNo={$PageNo}";
        }
    }
    else
    {
        $reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid;
    }

    将其替换为以下代码:

    // 新代码
    if($typeid>0)
    {
        // 获取栏目信息
        $typeinfos = GetOneType($typeid);
        // 获取栏目目录
        $typedir = $typeinfos['typedir'];
        // 处理目录中的特殊字符,确保链接正确
        $typedir = preg_replace("/[\/]{1,}/", '/', $typedir);
        $typedir = str_replace('{cmspath}', '', $typedir);
        // 拼接最终的URL
        $reurl = $typedir . ($PageNo > 1 ? '_' . $PageNo : '') . '.html';
        // 如果开启了静态化,并且是第一页,则去掉_page_后缀
        if($GLOBALS['cfg_rewrite'] == 'Y' && $PageNo == 1)
        {
            $reurl = $typedir . '.html';
        }
    }
    else
    {
        $reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid;
    }
  5. 保存并上传 修改后的 channelunit.helper.php 文件到你的服务器,覆盖原文件。

代码解释:

  • 这段新代码的核心是获取当前栏目的 typedir(栏目目录),然后用这个目录来构建 URL。
  • {$PageNo} 是页码,当有分页时,链接会变成 目录_2.html 这样的形式。
  • if($GLOBALS['cfg_rewrite'] == 'Y' && $PageNo == 1) 这个判断确保了第一页的链接是 目录.html,而不是 目录_1.html,更加美观。

第三步:配置服务器重写规则

这是告诉服务器如何将一个“不存在”的静态 URL 请求,转发给 DedeCMS 的动态脚本去处理,你需要根据你的服务器类型选择对应的规则。

Apache 服务器

在网站根目录下创建或修改一个名为 .htaccess 的文件。

.htaccess 文件内容:

# 将 RewriteEngine 模式打开
RewriteEngine On
# 如果请求的是一个真实存在的文件或目录,则直接访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# DedeCMS 主页规则
RewriteRule ^index\.html$ /index\.php [L]
# 文章详情页规则 (文章ID.html)
RewriteRule ^([a-z0-9\-]+)\.html$ /plus/view\.php?aid=$1 [L]
# 栏目列表页规则 (栏目目录.html 或 栏目目录_页码.html)
RewriteRule ^([a-z0-9\-]+)_([0-9]+)\.html$ /plus/list\.php?tid=$1&PageNo=$2 [L]
RewriteRule ^([a-z0-9\-]+)\.html$ /plus/list\.php?tid=$1 [L]
# 标签列表页规则
RewriteRule ^tags\.html$ /plus/tags\.php [L]
RewriteRule ^tags/([a-zA-Z0-9\-]+)\.html$ /plus/tags\.php?/$1 [L]

说明:

  • tid=$1 中的 $1 是指正则表达式 ([a-z0-9\-]+) 匹配到的内容,也就是你的栏目目录名。
  • PageNo=$2 匹配的是页码。
  • 将上面的代码完整复制到 .htaccess 文件中,并上传到网站根目录。

Nginx 服务器

修改 Nginx 的配置文件,通常在 nginx.conf 或你网站对应的虚拟主机配置文件中。

server 块内添加如下规则:

server {
    # ... 其他配置 ...
    # 开启重写引擎
    rewrite_on;
    # DedeCMS 主页规则
    rewrite "^/index\.html$" /index.php last;
    # 文章详情页规则
    rewrite "^/([a-z0-9\-]+)\.html$" /plus/view.php?aid=$1 last;
    # 栏目列表页规则
    rewrite "^/([a-z0-9\-]+)_([0-9]+)\.html$" /plus/list.php?tid=$1&PageNo=$2 last;
    rewrite "^/([a-z0-9\-]+)\.html$" /plus/list.php?tid=$1 last;
    # 标签列表页规则
    rewrite "^/tags\.html$" /plus/tags.php last;
    rewrite "^/tags/([a-zA-Z0-9\-]+)\.html$" /plus/tags.php?/$1 last;
    # ... 其他配置 ...
}

说明:

  • last 标识表示完成当前的 rewrite 规则后,停止处理后续的 rewrite 规则,并搜索匹配的 location
  • 修改完 Nginx 配置后,需要执行 nginx -s reload 命令来重新加载配置使其生效。

第四步:更新栏目和生成HTML

完成以上所有配置后,你还需要在后台重新生成一下网站,才能让伪静态链接生效。

  1. 进入 核心 -> 批量更新栏目HTML
  2. 勾选所有栏目,点击 开始生成,这一步会更新数据库中的栏目链接格式。
  3. 进入 生成 -> 一键更新网站,选择“更新所有栏目”和“更新所有文档”,然后开始生成,这一步会根据新的链接规则生成静态页面。

常见问题排查

  • 404 Not Found 错误

    • 原因1:服务器重写规则未生效或配置错误,请检查 .htaccess 文件(Apache)是否在根目录,或 Nginx 配置是否已正确加载。
    • 原因2:栏目目录名中包含特殊字符(如中文、空格),DedeCMS 伪静态对目录名有要求,建议使用英文、数字和短横线 。
    • 原因3:栏目在后台的“目录选项”里,目录名为空或使用了 {cmspath} 等变量,请确保填写了简单有效的目录名。
  • 链接还是动态的 (plus/list.php?tid=...)

    • 原因channelunit.helper.php 文件修改不成功或路径错误,请务必确认文件已正确覆盖,并且代码修改无误。
  • 分页链接错误

    • 原因:检查 .htaccess 或 Nginx 规则中的分页正则表达式是否正确,以及 channelunit.helper.php 中是否正确拼接了 {$PageNo}

通过以上四个步骤,你就可以成功地为 DedeCMS 配置好目录形式的伪静态了,整个过程最核心的就是 第二步修改 channelunit.helper.php,它决定了你链接的“骨架”。

-- 展开阅读全文 --
头像
dede 获取网站标题
« 上一篇 03-23
C语言16进制转10进制如何实现?
下一篇 » 03-23

相关文章

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

目录[+]