帝国 CMS 伪静态后 404 怎么办
学完这篇,你能把帝国 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,按顺序查这几项
这一步处理剩下的边角原因。
- 子目录路径:帝国装在
/cms/下,.htaccess里的RewriteBase要写RewriteBase /cms/,Nginx 规则的跳转路径也要带/cms/。 - 大小写和结尾斜杠:Linux 服务器区分大小写,URL 写成
ListInfo-1-0-1.html就会 404。 - 静态与伪静态混用:栏目里如果之前生成过静态 HTML,删掉旧静态文件再测,避免误判。
- 刷新缓存:「系统」→「数据更新」→「更新缓存」,再重新生成栏目页和内容页。
- 看日志: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。
原文链接:https://www.gj0.com/thread-697.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。