问题现象:
- WordPress 固定链接结构只能用"朴素"模式,改成其他格式文章就 404。
- 更新文章时报错:“更新失败。响应不是有效的 JSON 响应。”
原始的 nginx 配置:
server {
server_name example.com;
...
root /var/www/wordpress;
index index.php index.html;
location / {
try_files $uri $uri/ $uri.html =404;
}
...
}
排查后发现根本原因是 nginx 无法将子路径重定向到 WordPress。
“朴素"固定链接没有子路径,只有查询字符串:https://52.175.32.36/?p=123,所以上面的配置能正常工作。一旦改了固定链接结构,URL 变成子路径形式,上面的规则就处理不了路由了。
修改 nginx 配置如下,然后重启 nginx:
server {
server_name example.com;
...
root /var/www/wordpress;
index index.php index.html;
location / {
# 文件 ($uri) 或目录 ($uri/) 都不存在时,重定向到 /index.php + 查询字符串
try_files $uri $uri/ /index.php?$args;
index index.html index.htm index.php;
}
...
}
关键改动就是把 =404 改成 /index.php?$args,让 nginx 把无法匹配的子路径请求转发给 WordPress 的 index.php 处理。