5招彻底解决wordpress打开所有页面404,这份避坑指南请收好
网站做好了没人访问,比404报错更让人绝望。刚上线的站点,用户点进去全是白屏或报错,流量全在流失,这比没建站还惨。很多站长遇到wordpress打开所有页面404就慌,以为是程序坏了,其实90%的情况是配置没搞对。
做建站多年,我见过太多人在这上面栽跟头。今天不讲虚的,直接给一份实战避坑指南。从原理到排查,从配置到优化,一步步带你把问题揪出来。记住,404不是世界末日,是服务器在给你发信号。
概念速懂:为什么整站都报404
很多项目经理分不清“页面404”和“整站404”。单页404是文章删了或链接错了,整站404是WordPress核心机制崩了。
WordPress靠伪静态规则工作。你访问example.com/about/,服务器要把它翻译成index.php?page_id=123。这个翻译过程依赖.htaccess文件里的重写规则。如果规则丢了、错了,或者服务器不支持重写,浏览器发出的请求就直接掉进404黑洞。
这里有个关键区别:Apache服务器用.htaccess控制,Nginx服务器用nginx.conf控制。很多站长买了云服务器,默认是Nginx,却还在折腾.htaccess,当然没用。
还有一种隐蔽情况:WordPress根目录权限问题。如果wp-content或wp-includes文件夹权限不对,PHP读不到文件,也会直接返回404。这不是链接问题,是文件访问问题。
理解了这个原理,你就知道,排查方向就三条:重写规则、文件权限、数据库链接结构。别乱装插件,别重装系统,先按顺序查。
注册与购买流程:服务器选型定生死
很多404问题,根源在服务器选型。别觉得随便买台云主机就行,不同厂商、不同系统、不同Web服务器,配置逻辑完全不一样。
选系统: Linux还是Windows?WordPress强烈建议用Linux。Windows版IIS对URL重写支持较弱,配置复杂,容易出错。Linux下用Apache或Nginx,社区资源丰富,排查路径清晰。
选Web服务器:
- Apache: 传统选择,
.htaccess文件直接生效,配置直观。适合新手,但高并发下性能不如Nginx。 - Nginx: 现代标配,性能强,但配置写在
/etc/nginx/conf.d/目录下,不能直接放.htaccess。很多站长在这一步踩坑。 - 宝塔面板: 国内常用,可视化配置,能自动生成Nginx/Apache配置。适合不想碰命令行的项目经理,但要注意版本兼容性。
选镜像: 阿里云、腾讯云都有WordPress一键部署镜像。阿里云官方文档里有详细的WordPress部署指南,建议先读一遍再动手。镜像自带LAMP/LNMP环境,省去了手动安装PHP、MySQL的麻烦,但要注意PHP版本是否匹配。WordPress 6.0以上建议PHP 7.4或8.0,太低会报错,太高可能有兼容性问题。
购买时的避坑点:
- 带宽别选太小: 1M带宽够用,但别选512K。测试环境可以,生产环境会卡死。
- 磁盘别选太便宜: SSD比SATA快,404排查时日志读写频繁,SSD能省不少时间。
- 地域选用户近的: 国内用户选华北2(北京)或华东1(杭州),延迟低,排查日志也快。
买完服务器,别急着装WordPress。先SSH登录,检查系统版本、内存、CPU。运行free -m看内存,df -h看磁盘。如果内存低于1G,建议先升级,否则PHP-FPM容易崩,间接导致404。
配置与部署步骤:手把手教你修404
现在进入实操环节。假设你已部署好WordPress,但整站404。按下面顺序排查,每一步都给你具体命令。
第一步:检查重写规则
Apache服务器:
- 登录cPanel或SSH,进入网站根目录。
- 检查
.htaccess文件是否存在。 - 如果不存在,用文本编辑器新建,粘贴以下内容:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
- 如果文件存在,检查内容是否完整。很多人手动改过,导致规则丢失。
- 保存后,访问网站。如果还404,进入下一步。
Nginx服务器:
- 找到Nginx配置文件,通常在
/etc/nginx/conf.d/default.conf或/etc/nginx/sites-available/default。 - 在
server块内,找到location /,替换为:
location / {index index.php index.html index.htm;try_files $uri $uri/ /index.php?$args;
}location ~ \.php$ {fastcgi_pass unix:/run/php-fpm/php8.1-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;
}
- 注意
fastcgi_pass后面的路径,要根据你实际的PHP-FPM socket路径修改。用ls /run/php-fpm/查看。 - 测试配置:
nginx -t。如果显示syntax is ok,重载配置:systemctl reload nginx。 - 访问网站,看是否解决。
第二步:检查文件权限
权限不对,PHP读不到文件,直接404。
SSH登录服务器。
进入网站根目录:
cd /var/www/html检查权限:
ls -la标准权限应该是:
- 文件夹:755
- 文件:644
wp-config.php:600(敏感文件)
如果权限不对,执行:
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php
- 特别检查
wp-content目录,权限必须是755。很多人误设为777,导致安全风险,或权限太低导致404。
第三步:检查数据库链接结构
如果前两步都没用,问题可能在数据库。WordPress的wp_options表里存着siteurl和home,如果这两个值错了,整站404。
- 登录phpMyAdmin或SSH执行mysql命令。
- 查询:
SELECT option_name, option_value FROM wp_options WHERE option_name IN ('siteurl', 'home');
- 检查值是否包含协议(http/https)和正确的域名。如果值是
http://localhost,改成https://yourdomain.com。 - 如果不确定,可以暂时禁用Permalinks结构:
- 登录WordPress后台(如果还能进)。
- 设置 > 固定链接 > 选择“默认”(/?p=123格式)。
- 保存后,测试网站。如果正常,说明是Permalinks规则问题,重新选择“文章名”结构。
- 如果后台进不去,用SQL修改:
UPDATE wp_options SET option_value = 'plain' WHERE option_name = 'permalink_structure';
- 保存后,访问网站。如果正常,再改回“文章名”结构,并更新
.htaccess或Nginx配置。
第四步:检查SSL证书与重定向
HTTPS站点常见坑:混合内容或重定向循环。
- 检查
.htaccess或Nginx配置里是否有强制HTTP转HTTPS的规则。 - 如果规则写了两次,或域名不一致,会导致404。
- 确保
siteurl和home都是https://开头。 - 在浏览器F12控制台,看是否有
mixed content警告。如果有,说明部分资源还是HTTP,会导致加载失败,间接表现为404。
常见问题:这些坑你肯定踩过
问题1:改了配置还是404
原因: 浏览器缓存或CDN缓存。 解决: 强制刷新(Ctrl+F5),或清除CDN缓存。如果用了Cloudflare,进Dashboard清Purge Everything。
问题2:部分页面404,部分正常
原因: 个别文章或页面的slug被改过,或数据库链接结构不一致。 解决: 后台 > 设置 > 固定链接 > 不改动任何内容,直接点“保存”。这会刷新所有链接结构。
问题3:上传主题或插件后404
原因: 主题/插件里的函数覆盖了重写规则。 解决: 切换到默认主题(Twenty Twenty-Three),禁用所有插件。如果正常,逐个启用插件,找出问题源。
问题4:服务器迁移后404
原因: 数据库里的siteurl和home没改。
解决: 用SQL批量替换:
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://old-domain.com', 'https://new-domain.com') WHERE option_name = 'siteurl' OR option_name = 'home';
注意:wp_posts表里的post_content也可能有旧域名,用类似SQL替换,但要注意转义。
问题5:宝塔面板下404
原因: 宝塔的Nginx配置和手动配置冲突。
解决: 宝塔面板 > 网站 > 设置 > 配置网站 > 网站目录,确保“运行目录”是/。然后点“保存”,让宝塔重新生成配置。再手动检查Nginx配置是否有冲突。
优化建议:让404不再复发
修好404不是终点,防止复发才是王道。
1. 自动化备份
每周自动备份数据库和文件。用wp-cli或宝塔面板的备份功能。一旦出问题,5分钟回滚,比排查1小时快得多。
wp db export --add-drop-table > backup_$(date +%F).sql
2. 监控工具 用UptimeRobot或Pingdom监控网站状态。设置404告警,第一时间知道问题,而不是等用户投诉。
3. 文档化
把.htaccess、Nginx配置、数据库链接结构截图存档。下次迁移或换服务器,直接照搬,不用重新排查。
4. 权限规范
建立权限检查清单。每次部署后,运行find . -type d -exec chmod 755 {} \;和find . -type f -exec chmod 644 {} \;,确保权限一致。
5. 测试环境 生产环境改动前,先在测试环境验证。用Docker或虚拟机搭建测试环境,模拟服务器环境。阿里云官方文档里有Docker部署WordPress的教程,可以参考。
6. 日志分析
开启Nginx/Apache的访问日志和错误日志。404发生时,日志会记录请求路径。用grep过滤404状态码:
grep " 404 " /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn
这能帮你定位哪些页面被404,是规则问题还是链接问题。
7. 前端缓存 用WP Rocket或W3 Total Cache插件,开启页面缓存。即使偶尔出现404,缓存也能兜底,用户体验不会崩。
8. 安全加固
404有时是黑客攻击的迹象。检查access.log里是否有大量404请求同一文件,比如/wp-admin/admin-ajax.php。如果有,用Fail2ban或安全插件拦截。
网站建设与开发行业,细节决定成败。一个404,背后可能是服务器选型、配置逻辑、数据库结构、文件权限的多重叠加。别急着重装系统,别乱装插件,按步骤排查,80%的问题都能解决。
记住,避坑指南不是让你怕出错,而是让你知道出错后怎么快速恢复。项目经理最怕的不是技术难题,而是问题反复出现、影响项目进度。把这次排查过程记录下来,形成SOP,下次再遇到,10分钟搞定。
你更倾向模板建站还是定制开发?欢迎评论,说说你的踩坑经历。