如何在子文件夹中为 WordPress REST API 配置 nginx?

Posted

技术标签:

【中文标题】如何在子文件夹中为 WordPress REST API 配置 nginx?【英文标题】:How do I configure nginx for WordPress REST API in sub-folder? 【发布时间】:2019-11-17 16:23:56 【问题描述】:

我正在尝试在我们域下的子文件夹中设置多个 Wordpress 站点(即不是多站点),但我在配置 REST API 端点时遇到了困难。例如,此端点工作正常:

https://example.com/site1/?rest_route=/wp/v2/posts

但是这个端点给出了 404:

https://example.com/site1/wp-json/wp/v2/posts

我尝试在我的 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;

我在WordPress docs 或nginx wiki 中看不到对 wp-json 的任何特殊处理。我在这里想念什么?该网站的永久链接设置为Numeric (https://example.com/site1/archives/123),如果这可能起作用的话。

更新

编辑 full config file 的要点和配置语法 lints 没问题:

nginx -c /etc/nginx/nginx.conf -t

nginx:配置文件/etc/nginx/nginx.conf 语法没问题 nginx:配置文件/etc/nginx/nginx.conf 测试成功

【问题讨论】:

你能显示完整的配置吗? 我已经看到了最后一个标志的重写行。也许这就是缺少的东西? 谢谢@TarunLalwani 我刚刚尝试添加最后一个并重新排列两个重写规则的顺序,但它没有修复 404 @JannieTheunissen,我希望看到完整的配置能够对某些内容发表评论。目前,只有这两行对我没有帮助 即将发布的完整配置要点。我只需要在里面编辑一堆东西 【参考方案1】:

我认为rewrite指令应该写成如下图:

server 
    location /site1/wp-json
        
            rewrite ^(/site1/wp-json.*)$ /site1/?rest_route=$1 last;
        

【讨论】:

感谢法哈姆。我尝试了您的解决方案,但它不起作用。 您能否通过在终端中运行nginx -c /etc/nginx/nginx.conf -t 来发布结果。 @JannieTheunissen 您的 /etc/nginx 中应该有一个启用站点的文件夹,您可以检查那里是否有任何配置文件吗?如果是这样,请在该文件中添加配置。 有两个包含的配置,我已将它们合并到 gist 中以获得全貌 我知道这是一个非常愚蠢的问题,但是在考虑了您的配置文件几个小时之后,我只剩下最愚蠢的问题了。您的网站永久链接设置是什么?【参考方案2】:

我能够像这样解决它:

location /wordpress/ 
  rewrite ^/wordpress/wp-json/(.*?)$ /wordpress/index.php?rest_route=/$1 last;

【讨论】:

【参考方案3】:

一个简单的方法如果您的子文件夹中的网站页面已经在工作,只需将 index.php 添加到 url:

https://site1.com/site2/index.php/wp-json/

如果您的网站页面在子文件夹中仍然无法使用,请将此代码也添加到 nginx/sites-available/website.conf 文件中:

location /site2 
        rewrite ^(/[^/]+)?(/wp-.*) /site2/$2 break;
        rewrite ^/site2/(.*)$ /site2/index.php?q=$1 last;

【讨论】:

以上是关于如何在子文件夹中为 WordPress REST API 配置 nginx?的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress REST API:如何在 WP REST API JSON 文件中获取“纯文字”内容?

需要将 wordpress 帖子分类到子文件夹中,而无需在子文件夹中单独安装 wordpress

cakephp2与wordpress在子文件夹中

如何在子类别页面中显示 Wordpress 类别?

wordpress 如何在子页面中导航上一页和下一页

WordPress REST API - 如何在没有插件的情况下进行身份验证