CMS站点伪静态失效,页面404故障排查
CMS站点伪静态失效导致页面404,通常意味着服务器没有正确将动态URL重写为静态形式,或者CMS的伪静态规则未生效。
本文面向零基础站长,从故障现象出发,逐步排查服务器配置、CMS设置和文件权限,最终恢复页面正常访问。
先确认故障现象和影响范围
打开网站前台,点击任意文章或栏目链接,如果浏览器返回404 Not Found,但直接访问动态地址(如 index.php?)能正常显示,基本可以断定是伪静态规则失效。
m=article&id=1
此时先检查是全部页面404,还是只有部分页面404。
全部404通常指向服务器重写模块未开启或规则文件丢失;
部分404可能是规则不完整或CMS缓存问题。
检查服务器重写模块和伪静态规则
不同Web服务器的排查方法不同,下面分别说明。
Nginx环境
- 登录服务器,执行
nginx -V查看编译参数,确认包含--with-http_rewrite_module。如果没有,需要重新编译或安装包含该模块的版本。 - 找到站点配置文件,通常位于
/etc/nginx/conf.d/或/www/server/panel/vhost/nginx/。检查server块中是否有include引入伪静态规则文件,例如include /www/server/panel/vhost/rewrite/yourdomain.conf;。 - 打开该规则文件,确认内容与CMS官方提供的伪静态规则一致。以WordPress为例,规则通常为:
location / {
try_files $uri $uri/ /index.php?$args;
}
- 保存后执行
nginx -t测试配置,无误后nginx -s reload重载。
Apache环境
- 执行
apachectl -M | grep rewrite查看rewrite_module是否加载。如果没有,在配置文件中取消LoadModule rewrite_module modules/mod_rewrite.so的注释。 - 确认站点目录的
AllowOverride设置为All,否则.htaccess文件不会生效。 - 检查网站根目录下的
.htaccess文件是否存在且内容正确。WordPress默认规则为:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
- 重启Apache:
systemctl restart httpd或service apache2 restart。
核对CMS后台伪静态设置
服务器规则正确后,还需确认CMS本身开启了伪静态。
以常见CMS为例:
- WordPress:进入“设置”->“固定链接”,选择“文章名”或自定义结构,保存更改。即使之前已设置,也建议重新保存一次,这会刷新重写规则。
- 织梦DedeCMS:后台“系统”->“系统基本参数”->“核心设置”,开启“启用伪静态”,并确保“伪静态后缀”与服务器规则匹配。
- 帝国CMS:后台“系统”->“伪静态参数设置”,根据服务器环境选择对应规则,并生成伪静态页面。
修改后清空CMS缓存,并刷新网站首页测试。
排查文件权限和路径问题
如果以上步骤都正确,但依然404,检查网站根目录路径是否与服务器配置一致。
例如Nginx中 root 指令指向的目录必须包含CMS入口文件 index.php。
同时确保 .htaccess 文件(Apache)或伪静态规则文件(Nginx)有正确的读取权限。
另外,某些CMS会在静态化设置中生成纯静态HTML文件,如果误开启,可能导致动态请求被拦截。
检查是否存在 html 目录,若有,暂时重命名测试。
验证修复效果与常见疑问
完成上述调整后,访问几个之前404的页面,观察是否正常。
同时查看服务器错误日志(Nginx:/var/log/nginx/error.log;
Apache:/var/log/httpd/error_log),确认没有重写循环或文件不存在的报错。
问:伪静态规则正确,为什么还是404?
答:可能是CMS缓存未更新,或服务器未重载配置。尝试重启Web服务并清除CMS缓存。
问:部分页面404,部分正常,是什么原因?
答:检查CMS的URL规则是否覆盖所有栏目类型,例如自定义文章模型可能需要单独添加规则。
问:使用宝塔面板如何操作?
答:在宝塔面板中,进入网站设置->伪静态,选择对应CMS规则保存,然后重载Nginx或Apache。
问:修改后网站出现500错误怎么办?
答:通常是规则语法错误,检查规则文件是否有拼写错误,或暂时恢复默认规则。
如果问题依旧,建议对比CMS官方文档的伪静态要求,或联系服务器运维人员协助排查。