WordPress REST API (wp-API)404错误: 无法访问 WordPress REST API

我已经使用 Wordpress REST 插件 WP-API 几个月了,同时在本地使用 XAMPP 进行开发。我最近迁移我的网站到一个 EC2实例,一切都工作良好 除了我现在得到一个404与以下消息每当我尝试访问任何端点的 API:

请求的 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 支持论坛,我没有想法。谢谢!

147005 次浏览

更新新方式

我在一个本地项目中也遇到过类似的问题。

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

如果它显示一个404错误,那么 先更新永久链接 (参见“分页导航不工作”部分

如果可行,也许你需要在 ubuntu 上启用 mod_rewrite:

a2enmod rewrite
sudo service apache2 restart

安装

WordPress 4.7中包含了 REST API!插件不再需要,只需安装最新版本的 WordPress,你就可以开始了。

如果你在4.7之前:

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

  2. 安装并激活它。

用法

获得所有职位:

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

对于搜索功能,搜索测试文章看起来像这样:

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

结果证明这是 Apache 配置的一个问题。

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

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

所有的 AllowOverride变量都被设置为 Nothing,我用 All替换了它。

成功了!

我在最新的 WordPress 4.7 + 中遇到了这个问题。在我的例子中,RESTAPI 只有在我将永久链接设置更改为“普通”以外的其他设置(这是我的安装的默认设置)之后才能工作。

在 WPEngine 和 WP 4.9.2上,我只需要更新永久链接就可以获得新的、新安装的站点来返回 v2 API 调用。我所做的:

  1. 创建网站
  2. 浏览到 http://yoursitename.wpengineering. com/wp-json/wp/v2/post”rel = “ norefrer”> http://yoursitename.wpengine.com/wp-json/wp/v2/posts
    • 拿404
  3. 进入管理,设置,永久链接,选择“发布名称”
  4. 点击“保存更改”
  5. 浏览到 http://yoursitename.wpengineering. com/wp-json/wp/v2/post”rel = “ norefrer”> http://yoursitename.wpengine.com/wp-json/wp/v2/posts
    • Page 显示 JSON 响应

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

我也玩过

  • 设置 > 永久连结
  • 点击“保存”后,通过永久链接页面底部的代码手动更新. htaccess
  • 添加“ index.php”作为另一个答案建议
  • 确保通过 a2enmod启用 mod rewrite

我已经将 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 server. :)

我发现 mysite/wp-json/不工作,但 mysite/?rest_route=/是正常的。这破坏了我的站点上使用的 RESTAPI 的一些特性,但不是全部。

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

我已经将这个域从使用 Apache 更改为使用 nginx,并且没有正确地传输 .htaccess定制。因此,这个问题的快速解决方案是改回使用 Apache。这立即恢复了现场的工作秩序。

将来我将把这个域修改回 nginx,但是当我这样做时,我将测试它,并且小心不要影响 REST API。

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

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

当我将我的站点从 cPanel 迁移到 Google Cloud Compute Engine Instance 时,我遇到了同样的问题; 文件权限的问题最初是由于当前部署的 PHP 版本与以前的部署不同而引起的。

这里是修复 如何处理 GCP WordPress 错误“此页面无法工作 example.com 目前无法处理此请求。HTTP 错误500

我在本地主机上遇到了同样的问题,我只需设置 重写基地 Path 就解决了这个问题。Htaccess 文件,可以在 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>

如果您已经尝试了这个页面上的其他解决方案,但它们都不起作用,那么我成功地检查了其他解决方案。Htaccess 文件位于 public _ html 文件夹上方的根文件夹中(或者你已经安装了 WordPress 的任何地方)。

我发现了一个额外的一个可能来自以前的安装或被意外地移动到那里-它给’真正的’冲突的指示。Htaccess 文件。删除它为我解决了问题。

通过 SSH 在我的 Ubuntu 服务器上的 apache 虚拟主机配置中添加“ AllowOverride All”(正如其他作者之前所暗示的那样)为我带来了好处:

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

还有(如果你使用 letscrypt) :

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。 如果显示某个错误页面或返回主页,则不启用 RESTAPI。那我们得先启动它。

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

  1. 访问页面的管理页面(访问 https://yoursite.com/wp-json)
  2. 设定 > 永久连结(请浏览 https://yoursite.com/wp-admin/options-permalink.php)
  3. 确保未选择“平原”
  4. 选择邮件名称(这是最好的一个)
  5. 然后点击保存更改。这将重写/修复您的 .htaccess

请看下面的帮助截图:

Permalinks

choosing Post Name

来源

If you website is 翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳 https://example.wordpress.com (on wordpress) for example, use the below link which will give you the JSON response irrespective of any API settings/Permalinks etc..

如果要查看所有可用的端点,请使用以下命令- Https://developer.wordpress.com/docs/api/console/

请记住用您的域替换 **$site**

你可在此找到最新的文件- Https://developer.wordpress.com/docs/api/

对于我的新网站,我没有 Nginx 漂亮的链接设置启用我添加这到 location /

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

尝试移除任何

拒绝命令,允许 否认一切 允许..。

来自你. htaccess。

我阅读了一大堆文章,最终发现有一个强制站点要安装 https 插件并在我的本地激活,但是没有设置证书。它在我应该关闭 https 插件的时候发出 https 请求。

一旦停用,我就能够连接到 RESTAPI。

不是一个很深入的回答,但这是我的回答。希望这节省了一些人的时间!

如果您使用的是 Windows 操作系统,请按以下方式更改 Permalink Settings:

Custom structure: /index.php/%postname%/

Permalink Settings

关于 WordPress 6

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

http://example.com/index.php?rest_route=/wp/v2/posts