Wordpress REST API (wp-api) 404 Error: Cannot access the WordPress REST API

Wordpress REST API (wp-api) 404 Error: Cannot access the WordPress REST API

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

The requested URL /wordpress/wp-json/ was not found on this server

漂亮的永久链接已启用 具有以下结构 http://.../wordpress/sample-post/,在浏览器中导航到特定 post 时工作正常。

以下是有关我的设置的一些详细信息:

任何帮助将不胜感激,因为我已经浏览了 SO 和 WP 支持论坛几个小时并且没有想法。谢谢!

更新的新方式

我在本地项目中也遇到过类似的问题。 我在项目 url 之后使用了 index.php,它成功了。

http://localhost/myproject/index.php/wp-json/wp/v2/posts

如果显示 404 错误,则 update permalinks first(参见 "Paged Navigation Doesn't Work" 部分

如果有效,您可能需要在 ubuntu:

上启用 mod_rewrite
a2enmod rewrite
sudo service apache2 restart

安装

The REST API is included in WordPress 4.7! Plugins are no longer required, just install the latest version of WordPress and you're ready to go.

如果您使用的是 4.7 之前的版本:

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

  2. 安装并激活它。

用法

获取所有 posts:

www.mysite.com/wp-json/wp/v2/posts

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

/wp-json/wp/v2/posts?filter[s]=test

原来是Apache配置的问题。

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

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

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

成功了!

我在使用最新的 WordPress 4.7+ 时遇到了这个问题。在我的例子中,REST API 仅在我将永久链接设置更改为 "Plain" 以外的设置后才起作用,这是我安装的默认设置。

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

  1. 创建网站
  2. 浏览至 http://yoursitename.wpengine.com/wp-json/wp/v2/posts
    • 获得 404
  3. 转到管理、设置、永久链接,选择 "Post Name"
  4. 点击"Save Changes"
  5. 浏览至http://yoursitename.wpengine.com/wp-json/wp/v2/posts
    • 成功。页面显示 JSON 响应

我不得不手动制作一个 .htaccess,将其设置为 chmod 664,并将永久链接规则复制到其中。

我也玩过

  • 设置 > 永久链接
  • 单击后通过永久链接页面底部的代码手动更新 .htaccess "Save"
  • 添加 "index.php" 作为其他答案之一建议
  • 确保 mod rewrite 已通过 a2enmod
  • 启用

我已将 WordPress 安装从一个子目录移动到另一个子目录,所以在我的情况下,问题是由于 .htaccess 文件中的 WordPress 配置造成的。它试图将除主页以外的所有页面重定向到旧目录。只是将 olddir 更新为 newdir 的问题... 这不止一次让我绊倒,所以我想我应该把它放在这里...

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /olddir/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /olddir/index.php [L]
</IfModule>

# END WordPress

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

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

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

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

  4. 别忘了重启apache服务器。 :)

我发现mysite/wp-json/没有用,但是mysite/?rest_route=/是正常的。这破坏了我网站上使用的一些(但不是全部)REST API 功能。

这个问题的答案是最近对我 运行 服务器的更改。这破坏了 REST API,但直到后来才显现出来。

我已将此域从使用 Apache 更改为使用 nginx,但我没有正确传输 .htaccess 自定义设置。因此,这个问题的快速解决方案是改回使用 Apache。这立即使站点恢复了工作状态。

我以后会把这个域改回 nginx,但是当我这样做的时候,我会测试它,注意不要影响 REST API。

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

编辑此文件/etc/apache2/apache2.conf/var/www/ 权限从 "None" 更改为 "All" 重新启动 apache2 服务器。

当我将网站从 cPanel 迁移到 Google Cloud Compute Engine 实例时,我遇到了同样的问题;问题出在文件权限上,最初是由于当前部署与以前部署的 PHP 版本不同造成的。

这是修复程序

我在本地主机上遇到了同样的问题,我通过在 .htaccess 文件中设置 RewriteBase 路径解决了这个问题,该文件位于 WordPress 项目设置的根文件夹中。

**Example:** 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /[folder-name]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /[folder-name]/index.php [L]
</IfModule>

如果您尝试了此页面上的其他解决方案但没有奏效,我成功地检查了 public_html 文件夹上方的根文件夹(或您安装的任何位置)中的其他 .htaccess 文件WordPress).

我发现了一个额外的文件,它可能来自以前的安装或被意外移动到那里 - 它向 'real' .htaccess 文件提供了相互矛盾的指令。删除它解决了我的问题。

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

sudo vi /etc/apache2/sites-available/my-website-name.com.conf

还有(如果你使用 letsencrypt):

sudo vi /etc/apache2/sites-available/my-website-name.com-le-ssl.conf

文件应该如下所示:

<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>

不要忘记禁用并重新启用站点并重新加载 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

首先你必须检查 WordPress REST API 是否启用

最好的检查方法是访问此 URL:https://yoursite.com/wp-json。 如果您看到一些 JSON 响应,则表明 REST API 已启用。 如果它显示一些错误页面或 returns 主页,REST API 未启用。那我们得先启用它。

在这种情况下,您必须启用 永久链接

  1. 访问您页面的管理页面(访问 https://yoursite.com/wp-json
  2. 设置 > 永久链接(访问 https://yoursite.com/wp-admin/options-permalink.php
  3. 确保未选择 Plain
  4. 选择Post名称(最好)
  5. 然后点击保存更改。那将 rewrite/repair 你的 .htaccess

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

Source

例如,如果您的网站是 https://example.wordpress.com(在 wordpress 上),请使用下面的 link,这会给您 JSON 响应不管任何 API settings/Permalinks 等..

如果您想查看所有可用端点,请使用此 - https://developer.wordpress.com/docs/api/console/

记得用您的域名替换 **$site**

在此处查找最新文档 - https://developer.wordpress.com/docs/api/

对于我来说,在新网站上我没有启用 Nginx 漂亮链接设置我将它添加到location /

        try_files $uri $uri/ /index.php?$args; 

尝试删除任何

订单拒绝,允许 拒绝所有人 允许来自...

来自你.htaccess.