如何在Nginx服务器上让WordPress JSON-API工作?

13

因为某种原因,“开箱即用”的WordPress JSON API在Nginx上无法工作。我尝试了nginx配置文件中的多个重定向方案。唯一有效的是?json。但是,这对于身份验证和注册无效。

顺便说一下,我正在开发一个Cordova应用程序,并尝试使用WP JSON API进行WP后端处理。


有任何错误抛出吗?源代码呢? - Dester Dezzods
我找到了答案,下面发布。感谢你的问题! - etrey
6个回答

42

我的 Nginx 配置用于 wp-json API。

location / {
    # http://v2.wp-api.org/guide/problems/#query-parameters-are-ignored
    try_files $uri $uri/ /index.php$is_args$args;
}

location ~ ^/wp-json/ {
    # if permalinks not enabled
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}

奇怪的是,即使永久链接已经正确配置,在某些环境中似乎仍需要此解决方案。我不确定,可能是由于插件或主题代码的问题,或者浏览器本身的资源行为... https://wordpress.org/support/topic/contact-form-7-wp-json-404-error/#post-11427175 - Jesse Nickles
1
我需要在我的nginx.conf中添加这个配置,以便在Amazon Linux 2(AMI)上运行我的WordPress网站。 - Melvin Sy
仍然需要在我的Nginx配置中。现在,Gutenberg中添加链接的搜索功能再次可用,无论我输入什么内容都只会显示最新的帖子。感谢您的帮助。 - physalis
请注意,如果您已经正确配置了永久链接(permalinks),则不应存在此wp-json重写规则。否则会导致405错误。 - CR.
谢谢,你真是救星啊!我花了两天时间查看.conf文件,将你的代码复制到我的文件中,结果立刻就成功了。 - OCP30pt1c1l1l43-X1z17

6
我找到了解决问题的方法。在您假设(像我一样)这是插件问题之前,请确保永久链接正常工作。
我能够在 Nginx 网站上的子目录中为 Wordpress 站点更正永久链接。如果您遇到相同的问题,本文将帮助您解决此问题:这里

2
你从未想到最简单的事情,谢谢;这节省了我很多时间! - Sammaye
对于那些想知道如何修复它的人:转到设置=>永久链接=>选择一个选项(我使用了文章名称)=>保存更改=>验证您的/wp-json路由是否正常工作。 - Rafael Mejía
https://web.archive.org/web/20170324103810/http://lawsonry.github.io/2013/11/nginx-settings-wordpress-subdirectory-permalink-fix/ - etrey

2

我的情况是在网站根目录的子目录下部署WordPress,以下是使其正常工作的步骤:

  1. 网站根目录为 /www/wwwroot/www.abc.com/public/ - 可通过 www.abc.com 访问
  2. WordPress 目录为 /www/wwwroot/www.abc.com/public/blog/ - 可通过 www.abc.com/blog/ 访问
  3. 下载 WordPress 并将其解压到您的网站根目录,然后将其重命名为 blog
  4. chmod -R www:www blog - 在您的网站根目录中运行此命令。
  5. 将以下行添加到您的 Nginx 配置文件中。
location /blog/ {
  index index.php;
  try_files $uri $uri/ /blog/index.php?$args;
}

我已经在Nginx的子目录中安装了WordPress,并且这是最终适合我的方法。 - Jake Browning

1
如果您在子目录中安装了WordPress,则以下解决方案将适用:
location /<subdir>/ {
  index index.php;
  try_files $uri $uri/ /<subdir>/index.php?$args;
}

现在重新启动Nginx服务器

sudo systemctl restart nginx

0
在我的 Nginx 服务器上添加以下内容非常顺畅。
location / {
            try_files $uri $uri/ /index.php?$args;
    }

添加后,请使用以下命令检查Nginx配置

$ sudo nginx -t

然后如果一切正常,重新加载服务器

$ sudo systemctl reload nginx.

0
假设您的WordPress安装在根域上,应该是这样的:
#fix Woocommerce New Customer's activation link (embeded in welcome email)
rewrite ^/wp-json(.*)$ /index.php?rest_route=$1 permanent;

location / {
     #Forward all request to index.php
     try_files $uri $uri/ /index.php$is_args$args;
}

请注意,重写规则必须位于

location {}

之外,并且在索引重定向之上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接