帝国 CMS 伪静态后 404 怎么办

juming
juming 初级会员超兽战士
发布于 2026-10-08 02:38 ·1 浏览 ·0 回复

学完这篇,你能把帝国 CMS 开启伪静态后出现的 404 逐层排查掉,并且知道问题出在服务器重写规则、后台开关还是栏目设置上。

第一步:先确认这个 404 是谁返回的

这一步要弄清 404 是服务器(Apache/Nginx)吐出来的,还是帝国 CMS 自己吐出来的,因为两者解决方向完全不同。

在命令行执行(把域名换成你的):

curl -I "http://你的域名/listinfo-1-0-1.html"

看返回结果:如果是 HTTP/1.1 404 Not Found 且带 Server: nginx 或 Server: Apache,说明请求根本没进 PHP,是重写规则没生效;如果返回 200 但页面内容是"找不到页面",那是帝国 CMS 内部的栏目或模板问题。

再访问一个动态地址对照,比如 http://你的域名/e/action/ListInfo.php?classid=1&line=0&tempid=1。动态能开、伪静态不能开,基本可以断定是重写规则问题。

注意:帝国 CMS 默认后台目录是 /e/admin/,/e/action/ListInfo.php 是列表页入口。如果连这个动态地址也 404,先检查 /e/ 目录是否被移动或删除。

第二步:检查后台伪静态开关和每个栏目的生成方式

这一步要确认帝国 CMS 后台已经真正开启了伪静态,并且目标栏目被单独设成了伪静态。只开总开关、栏目没改,是 404 最常见的原因。

登录后台 http://你的域名/e/admin/,走「系统」→「系统设置」→「伪静态参数设置」,确认:

  • 「是否开启伪静态」选「是」
  • 「伪静态文件扩展名」填 html(要和你的规则里一致)

然后走「栏目」→「管理栏目」→ 找到目标栏目点「修改」→ 切到「生成选项」标签 → 「生成方式」下拉框必须选「伪静态」,而不是「生成静态」或「动态」。改完提交。

注意:帝国 CMS 的栏目生成方式是逐个栏目设置的,新加的栏目默认继承系统设置,往往不是伪静态。改完全部相关栏目后再测。

第三步:生成并部署重写规则

这一步把帝国 CMS 自己算出来的规则文件放到服务器上,规则不匹配是 404 的第二大原因。

在「伪静态参数设置」页面底部一般有「生成伪静态规则」按钮,选择你的服务器类型(Apache / Nginx / IIS),生成后下载 htaccess.txt、nginx.txt 之类的文件。

Apache:把内容另存为 .htaccess,放到网站根目录(帝国装在子目录如 /cms/ 就放该子目录),并用编辑器另存为 UTF-8 无 BOM。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^listinfo-([0-9]+)-([0-9]+)-([0-9]+)\.html$ e/action/ListInfo.php?classid=$1&line=$2&tempid=$3 [L]
RewriteRule ^showinfo-([0-9]+)-([0-9]+)-([0-9]+)\.html$ e/action/ShowInfo.php?classid=$1&id=$2&tempid=$3 [L]
</IfModule>

Nginx:把规则粘进站点配置文件的 server { } 块里,放在 location / 之前,保存后执行:

nginx -t
systemctl reload nginx

注意:上面只是示例格式,以你后台生成并下载的规则为准,因为不同帝国 CMS 版本、不同 URL 格式(是否带 ?、是否用 - 分隔)规则不一样,抄错一条就全站 404。

第四步:Apache 环境再确认两件事

这一步排除 Apache 本身没开重写功能的情况,因为规则再对,模块关了也没用。

在 httpd.conf 里确认:

LoadModule rewrite_module modules/mod_rewrite.so

并且网站目录的 <Directory> 段里是:

AllowOverride All

改完重启 Apache:systemctl restart httpd(CentOS)或 systemctl restart apache2(Ubuntu)。

注意:很多虚拟主机默认 AllowOverride None,这时 .htaccess 会被完全忽略,放上去也不生效。

第五步:改完还 404,按顺序查这几项

这一步处理剩下的边角原因。

  1. 子目录路径:帝国装在 /cms/ 下,.htaccess 里的 RewriteBase 要写 RewriteBase /cms/,Nginx 规则的跳转路径也要带 /cms/。
  2. 大小写和结尾斜杠:Linux 服务器区分大小写,URL 写成 ListInfo-1-0-1.html 就会 404。
  3. 静态与伪静态混用:栏目里如果之前生成过静态 HTML,删掉旧静态文件再测,避免误判。
  4. 刷新缓存:「系统」→「数据更新」→「更新缓存」,再重新生成栏目页和内容页。
  5. 看日志:Apache 看 error_log,Nginx 看 /var/log/nginx/error.log,里面会直接写出是哪个 URI 没匹配上规则。

小结

  • 404 分两种:服务器返回的(规则问题)和帝国 CMS 返回的(栏目配置问题),先用 curl -I 分清。
  • 后台「伪静态参数设置」开总开关只是第一步,每个栏目都要在「生成选项」里选「伪静态」。
  • 规则以后台生成并下载的文件为准,Apache 放根目录的 .htaccess(UTF-8 无 BOM),Nginx 粘进 server {} 后 nginx -t 再 reload。
  • Apache 要同时满足 mod_rewrite 已加载和 AllowOverride All。
  • 还不行就查子目录 RewriteBase、URL 大小写、旧静态文件和服务器 error_log。
版权声明:本文来自 GJ站长论坛《帝国 CMS 伪静态后 404 怎么办》
原文链接:https://www.gj0.com/thread-697.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~