DedeCms 手机站静态化完整教程

为什么要做手机站静态化?

在开始之前,我们先明确一下静态化的好处:

DedeCms手机站静态好教程
(图片来源网络,侵删)
  1. 极致的加载速度:静态页面(.html)是纯文本文件,服务器直接发送给浏览器,无需经过PHP解释、数据库查询等复杂过程,响应速度极快。
  2. 减轻服务器压力:静态页面不占用CPU和数据库资源,可以大大降低服务器的负载,尤其是在网站访问量较大时效果显著。
  3. 利于SEO优化:搜索引擎(如百度、谷歌)更青睐静态页面,认为它们更稳定、更可靠,抓取和索引的效率也更高。
  4. 提升用户体验:用户打开网页的速度快,等待时间短,体验自然更好。

准备工作

在动手之前,请确保你已经完成了以下准备工作:

  1. 环境要求

    • 一台已经安装并正常运行 DedeCms V5.7 或 V5.8 的服务器(Linux + Nginx 或 Apache 均可,但 Nginx 的伪静态规则更简洁)。
    • 服务器权限足够,可以修改文件和目录。
  2. 数据备份这是最重要的一步!

    • 备份数据库:进入 DedeCms 后台,点击【系统】->【数据库备份/还原】,执行完整的数据库备份。
    • 备份网站文件:通过 FTP 或服务器管理工具,将整个网站目录(包括 /dede/include/templets/special 等)打包下载到本地。
  3. 手机站模板

    DedeCms手机站静态好教程
    (图片来源网络,侵删)
    • 确保你已经准备好了手机专用的模板文件,这些模板存放在 /templets/default/mobile/ 目录下。
    • 后台已经配置好了【默认手机模板】,路径为:【系统】->【系统基本参数】->【核心设置】-> cfg_mobile_dir (默认为 /mobile/)。

核心步骤:开启并配置静态化

手机站的静态化主要分为两步:开启目录静态化设置伪静态规则

步骤 1:开启手机站目录静态化

这一步是告诉 DedeCms,将手机动态页面生成到指定的静态HTML目录中。

  1. 登录 DedeCms 后台。

  2. 进入【系统】-> 【核心设置】

    DedeCms手机站静态好教程
    (图片来源网络,侵删)
  3. 找到 “手机页面栏目设置” 部分。

  4. 你会看到类似下面的配置项:

    • 手机主页文件名index.html
    • 手机栏目列表文件名list_{tid}.html
    • 手机文章页面文件名{aid}.html
    • 手机专题列表文件名special/{tid}/index.html
    • 手机专题内容文件名special/{tid}/{cid}.html
  5. 关键操作:在 “手机栏目列表文件名”“手机文章页面文件名” 的输入框中,不要使用默认的动态路径(如 list.php?tid=...,而是直接使用上面提供的静态化模板,list_{tid}.html{aid}.html

  6. 点击【保存】。

步骤 2:设置服务器伪静态规则

这是静态化能否成功的关键一步,伪静态的作用是,当用户访问一个不存在的 .html 文件时,服务器能将其“伪装”成对 index.php 的请求,从而让 DedeCms 处理并返回正确的页面。

请根据你的服务器环境选择对应的规则:


A. Nginx 服务器 (推荐)
  1. 找到你的 Nginx 配置文件,通常位于 /usr/local/nginx/conf/nginx.conf 或站点配置目录(如 /etc/nginx/sites-available/your_domain)。

  2. server { ... } 块中,添加以下规则:

    # DedeCms 手机站伪静态规则
    if ($host ~* m\.yourdomain\.com) { # 将 m.yourdomain.com 替换为你的手机域名
        rewrite "^/index\.html$" /index.php last;
        rewrite "^/list-([0-9]+)\.html$" /list.php?tid=$1 last;
        rewrite "^/view-([0-9]+)-([0-9]+)\.html$" /view.php?aid=$1&cid=$2 last;
        rewrite "^/special/([0-9]+)/index\.html$" /special/index.php?tid=$1 last;
        rewrite "^/special/([0-9]+)/([0-9]+)\.html$" /special/index.php?tid=$1&cid=$2 last;
    }

    说明

    • m.yourdomain.com 是你的手机站域名,请务必替换成你自己的。
    • 如果你的手机站和主站使用二级目录(如 www.yourdomain.com/mobile/),规则需要稍作调整,将 ^/ 改为 ^/mobile/
    • last 标志表示停止处理当前的 rewrite 检验,然后搜索匹配的 location
  3. 保存配置文件,然后执行 nginx -s reload 或重启 Nginx 服务使配置生效。


B. Apache 服务器
  1. 确保你的 Apache 已经开启了 mod_rewrite 模块,通常在 httpd.conf 文件中找到 LoadModule rewrite_module modules/mod_rewrite.so 并确保其没有被注释。

  2. 在网站根目录(通常是 /public_html/www)下创建或编辑一个名为 .htaccess 的文件。

  3. 将以下规则写入 .htaccess 文件:

    # DedeCms 手机站伪静态规则
    RewriteEngine On
    # 将 RewriteBase 后面的路径改为你的网站根目录,如果是一级域名则为 /
    # 如果是二级目录,/mobile/,则 RewriteBase /mobile/
    RewriteBase /
    # 手机域名判断,请将 m.yourdomain.com 替换为你的手机域名
    # 如果使用二级目录,此判断可以去掉,直接应用下面的规则
    # RewriteCond %{HTTP_HOST} ^m\.yourdomain\.com [NC]
    RewriteRule ^index\.html$ index.php [L]
    RewriteRule ^list-([0-9]+)\.html$ list.php?tid=$1 [L]
    RewriteRule ^view-([0-9]+)-([0-9]+)\.html$ view.php?aid=$1&cid=$2 [L]
    RewriteRule ^special/([0-9]+)/index\.html$ special/index.php?tid=$1 [L]
    RewriteRule ^special/([0-9]+)/([0-9]+)\.html$ special/index.php?tid=$1&cid=$2 [L]

    说明

    • RewriteBase / 是关键,如果你的网站在二级目录下,请务必修改为 RewriteBase /你的目录/
    • [L] 标志表示如果这条规则被匹配,则停止处理后续的 RewriteRule
  4. 保存 .htaccess 文件,Apache 会自动读取它。


步骤 3:生成手机站静态页面

配置完成后,你需要手动生成一次静态页面,让 DedeCms 将现有的内容输出为 HTML 文件。

  1. 登录 DedeCms 后台。

  2. 点击【生成】-> 【手机页面生成】

  3. 你会看到几个选项:

    • 更新主页:点击它,生成手机站首页 index.html
    • 更新栏目:点击它,生成所有手机站栏目的列表页(如 list_1.html, list_2.html 等)。
    • 更新文档:点击它,生成所有手机站文章的详情页(如 html, html 等)。这个操作会比较耗时,如果文章很多,建议分批进行或选择“仅更新当天”
    • 更新专题:如果你的手机站有专题,点击它生成专题页面。
  4. 按需点击生成,生成成功后,你会看到提示信息。

步骤 4:验证结果

  1. 通过 FTP 连接服务器,进入你配置的静态目录(默认是 /mobile/)。
  2. 检查目录下是否生成了 index.htmllist_1.htmlhtml 等静态文件。
  3. 在浏览器中访问你的手机站域名(如 m.yourdomain.comwww.yourdomain.com/mobile/)。
  4. 查看网页源代码:在浏览器页面右键,选择“查看网页源代码”,如果看到的是完整的 HTML 代码,而不是包含 PHP 代码的源,那么恭喜你,静态化已经成功!如果源代码里还有 <?php ... ?>,说明静态化失败,请检查前几步的配置。

后续维护与注意事项

  1. 后如何处理?

    • 每次在后台添加、修改或删除手机站的内容后,都需要回到【生成】->【手机页面生成】页面,重新生成对应的页面。
    • 为了提高效率,可以只更新“主页”、“栏目”或“当天文档”,而不是每次都全站生成。
  2. 动态链接的保留

    • 即使开启了静态化,DedeCms 在后台的链接仍然是动态的(如 view.php?aid=100),这是正常的,因为伪静态规则会自动将用户对 html 的请求重定向到这个动态地址。
    • 但你需要在模板文件(如 article_article.htm)中,将文章链接的静态地址写对,DedeCms 的标签会自动处理,但如果手动修改,请确保链接是 {dede:field.id/}.html 这样的格式。
  3. 缓存问题

    • 如果发现修改后页面内容没有更新,可以尝试清除浏览器缓存或服务器缓存(如使用了 CDN 或 Redis 缓存)。
    • 检查 /data 目录下的缓存文件,有时旧的缓存文件会影响显示。
  4. 移动适配

    • 静态化只解决了“快”的问题,别忘了“适配”,确保你的手机站模板在 <head> 部分正确设置了 viewport 标签,并且使用了响应式设计或独立的移动端样式。
    <head>
        ...
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
        ...
    </head>

常见问题排查

  • Q: 404 Not Found,访问 .html 页面时页面找不到。

    • A: 伪静态规则没有生效,请检查 Nginx/Apache 的配置是否正确,并确保已经重启了服务,对于 Nginx,检查 server_namerewrite 规则是否匹配你的域名和路径。
  • Q: 访问 .html 页面,但显示的是首页内容或其他错乱内容。

    • A: 伪静态规则中的 rewrite 目标路径错误,把 list-1.html 重定向到了 index.php 而不是 list.php?tid=1,请仔细核对伪静态规则。
  • Q: 生成了静态页面,但点击栏目或文章链接后跳转到动态页面。

    • A: 模板中的链接标签没有使用静态化格式,检查模板文件里的 {dede:type}{dede:arclist} 等标签,确保它们生成的链接是 list_{tid}.html{aid}.html,DedeCms 默认标签通常能自动识别静态化设置,如果不行,可能需要手动指定。
  • Q: 服务器 500 Internal Server Error。

    • A: 伪静态规则语法错误,检查 .htaccess 文件或 Nginx 配置文件中的语法,特别是括号、分号等符号是否匹配。