Wordpress REST API(wp-api)404错误

dsa*_*951 35 wordpress wordpress-plugin wp-api wordpress-rest-api

几个月以来,我一直在使用Wordpress REST插件WP-API,同时使用XAMPP进行本地开发.我最近将我的站点迁移到EC2实例,一切正常,每当我尝试访问API上的任何端点时,我现在都会收到带有以下消息的404:

在此服务器上找不到请求的URL/wordpress/wp-json /

使用以下结构启用漂亮的固定链接http://.../wordpress/sample-post/,在浏览器中导航到特定帖子时可以正常工作.

以下是有关我的设置的一些细节:

  • Wordpress 4.4.1
    • 不是多站点
  • WP REST API插件2.0-beta9
  • Apache 2.2.22
  • Ubuntu 12.04.5

任何帮助将不胜感激,因为我已经通过SO和WP支持论坛几个小时,我的想法.谢谢!

Jit*_*pat 97

更新的新方式

我在本地项目中也遇到过类似的问题.index.php在我的项目网址之后使用它并且它有效.

http://localhost/myproject/index.php/wp-json/wp/v2/posts
Run Code Online (Sandbox Code Playgroud)

如果它显示404错误,则首先更新永久链接(请参阅"分页导航不起作用"部分

如果它有效,也许你需要mod_rewrite在ubuntu 上启用:

a2enmod rewrite
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

安装

REST API包含在WordPress 4.7中!不再需要插件,只需安装最新版本的WordPress即可开始使用.

如果您在4.7之前:

  1. 从这里下载插件:http://v2.wp-api.org/

  2. 安装并激活它.

用法

获取所有帖子:

www.mysite.com/wp-json/wp/v2/posts
Run Code Online (Sandbox Code Playgroud)

对于搜索功能,搜索测试帖子如下所示:

/wp-json/wp/v2/posts?filter[s]=test
Run Code Online (Sandbox Code Playgroud)


dla*_*ub3 25

我有最新的WordPress 4.7+这个问题.在我的情况下,REST API仅在我将永久链接设置更改为"Plain"以外的其他设置后才起作用,这是我的安装的默认设置.


Ana*_*aja 18

首先,您必须检查 WordPress REST API是否已启用

\n

最好的检查方法是访问此 URL:https://yoursite.com/wp-json。\n如果您看到一些 JSON 响应,则表明 REST API 已启用。\n如果\xe2\x80\x99s 显示一些错误页面或返回主页,则表明 REST API 未启用。然后我们必须先启用它。

\n

在这种情况下,您必须启用固定链接

\n
    \n
  1. 访问您页面的管理页面(访问https://yoursite.com/wp-json
  2. \n
  3. 设置 > 固定链接(访问https://yoursite.com/wp-admin/options-permalink.php
  4. \n
  5. 确保未选择普通格式
  6. \n
  7. 选择帖子名称(这是最好的一个)
  8. \n
  9. 然后单击“保存更改”。这将重写/修复你的.htaccess
  10. \n
\n

请参阅下面的帮助屏幕截图:

\n

固定链接

\n

选择帖子名称

\n

来源

\n


And*_*rts 17

在WPEngine和WP 4.9.2上,我只需更新永久链接即可获得新安装的新站点以返回v2 API调用.我做了什么:

  1. 创建网站
  2. 浏览http://yoursitename.wpengine.com/wp-json/wp/v2/posts
    • 得到404
  3. 转到管理员,设置,永久链接,选择"帖子名称"
  4. 点击"保存更改"
  5. 浏览http://yoursitename.wpengine.com/wp-json/wp/v2/posts
    • 成功.页面显示JSON响应

  • 不是所有的英雄穿着斗篷 (4认同)
  • 将永久链接切换到帖子名称对我有用 (2认同)

dsa*_*951 14

结果证明Apache配置存在问题.

首先,我删除.htaccess了根wordpress目录中的文件.

接下来,我导航/etc/apache2/sites-enabled并打开000-default

所有AllowOverride变量都设置为None,我将其替换为All.

这就是诀窍!


小智 9

这是文件权限错误,应用以下解决方案

编辑此文件 将权限从“无”/etc/apache2/apache2.conf 更改/var/www/为“全部” 重新启动apache2服务器。

  • 对于我来说,我特意将AllowOverride从None更改为All。 (2认同)

Pat*_*tic 7

我通过以下步骤解决了这个问题:

  1. 导航到 ..\Apache24\conf\httpd.conf 并搜索LoadModule rewrite_module modules/mod_rewrite.so.

  2. 通过删除标记来启用重写模块#

  3. AllowOverride None将的所有情况替换为AllowOverride All

  4. 不要忘记重新启动 apache 服务器。:)


Mat*_*Luh 5

通过 SSH 将“AllowOverride All”(正如其他作者之前所暗示的那样)添加到我的 Ubuntu 服务器上的 apache 虚拟主机配置中,这对我来说是成功的:

sudo vi /etc/apache2/sites-available/my-website-name.com.conf
Run Code Online (Sandbox Code Playgroud)

另外(如果您使用 LetsEncrypt):

sudo vi /etc/apache2/sites-available/my-website-name.com-le-ssl.conf
Run Code Online (Sandbox Code Playgroud)

这些文件应该如下所示:

<VirtualHost *:80>
# or <VirtualHost *:443> for the SSL configuration
    
    # [...]
    
    DocumentRoot /var/www/my-website-name.com/public_html

    <Directory "/var/www/my-website-name.com/public_html">
        # this allows .htaccess files (e.g. generated by Wordpress)
        # to overwrite the apache configuration on a directory basis:
        AllowOverride All
    </Directory>
    
    # [...]
    
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

不要忘记禁用并重新启用站点并重新加载 apache 以应用新配置:

sudo a2dissite my-website-name.com.conf
sudo a2dissite my-website-name.com-le-ssl.conf
sudo a2ensite my-website-name.com.conf
sudo a2ensite my-website-name.com-le-ssl.conf
sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)


Web*_*nan 5

在 WordPress 6 上

您可以使用此 URL,无需URL Rewrite也无需更改您的Permalink settings(我看到古腾堡编辑器正在使用此 URL 访问 REST)

http://example.com/index.php?rest_route=/wp/v2/posts
Run Code Online (Sandbox Code Playgroud)