Jan*_*sen 6 wordpress wordpress-rest-api nginx-config
我正在尝试在我们的域下的子文件夹中设置多个 WordPress 站点(即不是多站点),但我在配置 REST API 端点时遇到困难。例如,这个端点工作正常:
https://example.com/site1/?rest_route=/wp/v2/posts
Run Code Online (Sandbox Code Playgroud)
但是这个端点给出了 404:
https://example.com/site1/wp-json/wp/v2/posts
Run Code Online (Sandbox Code Playgroud)
我尝试在 nginx 配置中使用以下规则将失败的 url 重写为工作 url:
location /site1/wp-json {
rewrite ^/site1/wp-json(.*)$ /site1/?rest_route=$1;
}
location /site1/ {
try_files $uri $uri/ /site1/index.php$is_args$args;
}
Run Code Online (Sandbox Code Playgroud)
我在WordPress 文档或nginx wiki中看不到对 wp-json 的任何特殊处理。我在这里缺少什么?该网站的永久链接设置为Numeric( https://example.com/site1/archives/123如果这可能起作用,
编辑后的完整配置文件的要点和配置语法 lints 正常:
nginx -c /etc/nginx/nginx.conf -t
Run Code Online (Sandbox Code Playgroud)
nginx:配置文件/etc/nginx/nginx.conf语法正确
nginx:配置文件/etc/nginx/nginx.conf测试成功
我刚刚在 WP 5.7 中也遇到了这个。如果没有漂亮的永久链接,即使用“ Plain ”选项,例如?p=123,我的 nginx WP 安装使用如下请求:
/index.php?rest_route=/wp/v2/users/&who=作者...
这些都工作得很好。
但是,如果我启用漂亮的永久链接,例如“帖子名称”,/sample-post/它就会开始发出如下请求:
/wp-json/wp/v2/users/?who=作者...
这些都会返回 404。例如,编辑或发布帖子失败,浏览器开发工具会显示这种格式的 404 字符串。
但现在我们知道有效的模式,解决方案很明确 - 我们只需将非工作格式映射到工作格式:
# Resolves WP Gutenberg 404 issue
location /wp-json {
rewrite ^/wp-json(.*)$ /index.php?rest_route=$1 last;
}
Run Code Online (Sandbox Code Playgroud)
我认为重写指令应该写成如下所示:
server {
location /site1/wp-json
{
rewrite ^(/site1/wp-json.*)$ /site1/?rest_route=$1 last;
}
}
Run Code Online (Sandbox Code Playgroud)