WordPress 部署到服务器后只显示首页,其他页面(如文章、分类、标签、自定义页面)404 或无法访问,这是非常常见的问题,通常不是 WordPress 安装失败,而是固定链接(Permalink)重写规则未正确配置导致的。以下是系统性排查和解决方案:
✅ 一、常见原因与对应解决方法
🔹 1. Apache:mod_rewrite 未启用 或 .htaccess 未生效
-
✅ 检查
mod_rewrite是否启用:# Ubuntu/Debian sudo a2enmod rewrite sudo systemctl restart apache2# CentOS/RHEL sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/httpd/conf/httpd.conf sudo systemctl restart httpd -
✅ 确保 WordPress 根目录下有可读写的
.htaccess文件(权限建议644),内容类似:# 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⚠️ 若
.htaccess不存在或为空,请在 WordPress 后台 →「设置」→「固定链接」→ 任意点击「保存更改」,WordPress 会自动尝试生成(需目录可写)。 -
✅ 检查 Apache 虚拟主机配置是否允许
.htaccess覆盖:<Directory "/var/www/your-wordpress-site"> AllowOverride All # ❗必须是 All,不能是 None 或 FileInfo Require all granted </Directory>
🔹 2. Nginx:缺少重写规则(最常见于 Nginx 用户)
Nginx 不支持 .htaccess,必须手动在 server 块中添加 WordPress 伪静态规则:
location / {
try_files $uri $uri/ /index.php?$args;
}
# 可选:保护敏感文件
location ~ .(php|htaccess|ini|log|sh|sql|bak)$ {
deny all;
}
✅ 修改后重载 Nginx:
sudo nginx -t && sudo systemctl reload nginx
💡 提示:如果你用宝塔、AMH、LNMP 等面板,请在网站设置中开启「伪静态」并选择「WordPress」模板。
🔹 3. 固定链接结构设置错误
- 登录 WordPress 后台 →「设置」→「固定链接」
- ✅ 切换为 “朴素”(
?p=123)→ 测试其他页面是否能打开?- ✅ 如果能打开 → 说明是重写问题(回到上面检查服务器配置)
- ❌ 如果仍 404 → 说明有更底层问题(见下方)
🔹 4. 其他可能原因(进阶排查)
| 问题 | 检查方式 | 解决方案 |
|---|---|---|
| WordPress 地址(URL)错误 | 后台 → 设置 → 通用 → 「WordPress 地址」和「站点地址」是否为你的真实域名(如 https://example.com),不能是 localhost 或 127.0.0.1 |
✅ 改为正确 URL;若无法登录后台,可临时在 wp-config.php 中强制定义:define('WP_HOME','https://example.com');define('WP_SITEURL','https://example.com'); |
| 主题/插件冲突 | 后台 → 外观 → 主题 → 切换为默认主题(如 Twenty Twenty-Four);插件全部禁用 | ✅ 排查是否某插件(尤其 SEO、缓存、安全类)重写了路由 |
| 缓存干扰 | 浏览器缓存、CDN(Cloudflare)、对象缓存(Redis/Memcached)、插件缓存(WP Super Cache) | ✅ 清除所有缓存;临时关闭 CDN 和缓存插件测试 |
| HTTPS/SSL 重定向异常 | 访问 http:// 正常但 https:// 404?或混合内容报错? |
✅ 在 wp-config.php 添加:$_SERVER['HTTPS'] = 'on';(仅限强制 HTTPS 环境)或使用插件「Really Simple SSL」自动修复 |
✅ 二、快速诊断流程(推荐按顺序执行)
- ✅ 切换固定链接为「朴素」→ 测试
/wp-admin/post.php?post=1&action=edit是否能打开文章编辑页 - ✅ 切换回「文章名」→ 若 404 → 立即检查服务器重写配置(Apache/Nginx)
- ✅ 查看浏览器开发者工具(F12)→ Network 标签 → 点击内页,看返回状态码(404?500?301?)
- ✅ 查看服务器错误日志:
- Apache:
/var/log/apache2/error.log - Nginx:
/var/log/nginx/error.log
(搜索rewrite,404,Permission denied,No input file specified)
- Apache:
- ✅ 检查
wp-config.php中是否有硬编码的siteurl或home(可能覆盖后台设置)
📌 补充:如果你用的是宝塔面板(国内常用)
- 进入网站 →「设置」→「伪静态」→ 选择「WordPress」→ 保存
- 确保「SSL」→「强制 HTTPS」已按需开启(避免 HTTP/HTTPS 混合)
- 「防火墙」→ 关闭(测试时临时关闭,排除拦截)
如你提供以下信息,我可以帮你精准定位:
- 服务器环境(Apache / Nginx / 其他?版本?)
- 是否用宝塔/AMH/Oneinstack 等面板?
- 访问内页时浏览器显示什么(404?空白?跳转首页?)
wp-admin是否能正常登录?- 你当前的固定链接设置是什么?
欢迎贴出截图或日志片段,我来帮你逐行分析 👇
需要我为你生成 Apache/Nginx 完整配置示例 或 一键修复脚本,也随时告诉我! 🛠️
CLOUD云