在阿里云上搭建的 WordPress 网站,首页可以打开但内页(如文章页、分类页等)出现 404 错误,通常是因为 URL 重写规则(伪静态)未正确配置。WordPress 使用“美观链接”(Permalinks)时,需要服务器(如 Apache 或 Nginx)正确支持 URL 重写功能。
以下是常见原因及解决方法:
✅ 一、检查 WordPress 固定链接设置
- 登录 WordPress 后台(
http://你的域名/wp-admin)。 - 进入 设置 → 固定链接(Permalinks)。
- 尝试选择 “朴素”(
?p=123格式),保存。 - 再切换回你喜欢的格式(如“文章名”),再次保存。
⚠️ 这个操作会刷新
.htaccess文件(Apache)或触发 Nginx 重写规则更新。
✅ 二、根据服务器类型配置重写规则
情况1:使用 Apache 服务器
确保以下几点:
-
启用
mod_rewrite模块sudo a2enmod rewrite sudo systemctl restart apache2 -
允许
.htaccess覆盖打开你的网站虚拟主机配置文件(如
/etc/apache2/sites-available/000-default.conf),确保<Directory /var/www/html>中有:AllowOverride All而不是
AllowOverride None -
检查根目录是否有
.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如果没有,请手动创建或通过 WordPress 后台“固定链接”页面尝试自动生成。
情况2:使用 Nginx 服务器(更常见于阿里云 ECS)
Nginx 不使用 .htaccess,必须在配置文件中手动添加重写规则。
-
编辑 Nginx 配置文件(通常位于
/etc/nginx/sites-available/default或/etc/nginx/conf.d/your-site.conf)。 -
在
server { ... }块中,找到location /,修改或添加如下内容:location / { try_files $uri $uri/ /index.php?$args; } -
确保 PHP 处理正常:
location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass 127.0.0.1:9000; # 或 unix socket } -
保存后测试配置并重启 Nginx:
sudo nginx -t sudo systemctl restart nginx
✅ 三、检查文件权限
确保 .htaccess(Apache)或 Nginx 配置文件可读,并且 WordPress 可写:
chmod 644 /var/www/html/.htaccess
chown -R www-data:www-data /var/www/html/
✅ 四、阿里云特殊配置(如使用云虚拟主机)
如果你使用的是 阿里云虚拟主机(非 ECS):
- 登录 阿里云控制台 → 虚拟主机管理 → 高级环境设置 → 伪静态
- 选择 WordPress 模板并启用。
阿里云虚拟主机不支持
.htaccess自动写入,需通过控制台开启伪静态。
✅ 五、其他排查建议
- 清除浏览器缓存或用无痕模式测试
- 禁用所有插件,看是否某个插件导致冲突
- 更换默认主题(如 Twenty Twenty-Four)测试
- 检查是否开启了 CDN 或缓存插件(如 WP Super Cache、W3 Total Cache),尝试清除缓存
总结
| 问题原因 | 解决方法 |
|---|---|
| 伪静态未开启 | 设置固定链接并保存 |
| Apache 未启用 rewrite | 启用模块 + AllowOverride All |
| Nginx 未配置 try_files | 添加 try_files $uri $uri/ /index.php?$args; |
| 阿里云虚拟主机 | 控制台开启“伪静态” |
| 权限或缓存问题 | 检查权限、清除缓存 |
如果你能提供你使用的是 ECS 还是虚拟主机,以及 Apache 还是 Nginx,我可以给出更具体的配置示例。
需要的话,请贴出你的服务器类型和当前固定链接设置。
CDNK博客