如何在子文件夹中为 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 文件中获取“纯文字”内容?