我可以使用固定链接格式的REST-API吗?


9

最近,我所有的REST-API请求突然转为返回404错误,每个请求(无论是自定义端点还是内置)。

然后我发现这是由于永久链接的结构。/wp-json/在纯固定链接下无法访问,因为目前根本没有可用的重定向规则。

在这种情况下可以使用REST端点吗?自定义和内置。

Answers:


16

是的你可以。只需添加rest_route查询参数。

所以

https://wordpress.org/wp-json/

会成为

https://wordpress.org/?rest_route=/

https://wordpress.org/wp-json/wp/v2/将成为https://wordpress.org/?rest_route=/wp/v2给您一个更完整的例子。

因此,您想知道如何决定使用哪个?不用担心,这里有一个功能:get_rest_url()

另一个选择是,默认情况下<link>,标头中有一个为您提供API根的事实。

<link rel='https://api.w.org/' href='https://wordpress.org/wp-json/' />

因此,如果您需要弄清楚客户端JS只是使用一些类似的方法,

document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href');

因此,基本上,您不应该wp-json按照给定的部分进行操作(并对其进行硬编码),而应始终使用get_rest_url()上述的JS方法动态地构建它。


因此,如果我想简单地使用它,它将类似于https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y?这意味着我需要有一个条件来检测永久链接结构并基于该条件更改REST路由?
杰克·约翰逊

好吧,也许不是有条件的,但是您需要动态地构建它。参见上面的编辑。
kraftner

您如何在jsonp中使用此路由?我尝试过/?rest_route=/?_jsonp=callBackfn但状态为404。
redshift

@redshift通常请针对此类问题打开一个单独的问题。在您的情况下,您应该阅读查询字符串分隔符en.wikipedia.org/wiki/Query_string#Structure您需要这样写/?rest_route=/&_jsonp=callBackfn
kraftner

1

您可以在Web服务器上添加一个重写。

例如,nginx

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

0

rest_route查询参数是Ugly(WordPress的的选择的话不是我的)永久的风格。您可以将永久链接样式更改Post name为如下屏幕截图所示,并且该wp-json路径应该可以在URL中完全访问。这些固定链接样式中的其他样式也可能会起作用,但Post name对我有用,而我没有探索更多

图片说明了更改设置所需的按钮单击

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.