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

Posted

技术标签:

【中文标题】Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API【英文标题】:Wordpress REST API (wp-api) 404 Error: Cannot access the WordPress REST API 【发布时间】:2016-04-12 18:02:06 【问题描述】:

在使用 XAMPP 进行本地开发时,我已经使用 Wordpress REST 插件 WP-API 几个月了。我最近将我的站点迁移到了一个 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 支持论坛几个小时并且没有想法。谢谢!

【问题讨论】:

更新永久链接后,尝试禁用 wp-api 插件并再次激活,然后检查。 也看看:github.com/WP-API/WP-API/issues/1509 你最近更新了你的wordpress吗?因为从 4.4 开始,他们对 REST API 进行了很多更改 大家好,感谢您的意见,但这些都没有解决我的问题。 @Milap 在启用永久链接后已经尝试停用(和卸载),但这没有用。 GitHub 问题似乎表明该问题已在 beta7 中得到解决,但我使用的是 beta9。 @Christophvh 我正在使用最新版本的 WordPress 4.4.1 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

例如,如果您的网站是 https://example.wordpress.com(在 wordpress 上),请使用以下链接,该链接将为您提供 JSON 响应,而不管任何 API 设置/永久链接等。

https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.com/posts

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

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

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

【讨论】:

【参考方案3】:

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

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

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

    访问您页面的管理页面(访问https://yoursite.com/wp-json) 设置 > 固定链接(访问https://yoursite.com/wp-admin/options-permalink.php) 确保未选择纯色 选择帖子名称(这是最好的) 然后单击保存更改。这将重写/修复您的.htaccess

请看下面的帮助截图:

Source

【讨论】:

所以我将 Dacast 集成到一个站点中,我的 wp-json 端点存在,但我在 wp-json/dacast/init 上收到 404 GET 错误。当我去 localhost:8888/wordpress/wp-json/dacast/init 时,它也存在。关于这个有什么想法吗?【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

我发现了一个额外的文件,它可能来自以前的安装或被意外移动到那里 - 它与“真实”.htaccess 文件的说明相互矛盾。删除它为我解决了问题。

【讨论】:

【参考方案6】:

我在 localhost 上遇到了同样的问题,我通过在 .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>

【讨论】:

【参考方案7】:

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

这里是修复How to deal with GCP WordPress error "This page isn’t working example.com is currently unable to handle this request. HTTP ERROR 500

【讨论】:

【参考方案8】:

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

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

【讨论】:

对我来说,我专门将 AllowOverride 从 None 更改为 All。 更改哪个权限?允许覆盖?当我将其设置为全部时,即使在主页上也出现“未找到”错误。只有当我将永久链接设置为“普通”时,才能实现完整的 https 导航,这不是解决方案。 为我工作。这节省了我的时间。【参考方案9】:

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

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

我已将此域从使用 Apache 更改为使用 nginx,并且我没有正确转移 .htaccess 自定义项。因此,这个问题的快速解决方案是改回使用 Apache。这立即使该站点恢复正常工作。

我将来会将此域改回 nginx,但当我这样做时,我会对其进行测试并注意不要影响 REST API。

【讨论】:

【参考方案10】:

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

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

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

    AllowOverride None的所有case替换为AllowOverride All

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

【讨论】:

【参考方案11】:

我已将 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

【讨论】:

【参考方案12】:

我必须手动创建一个.htaccess,将其设置为chmod 664,并将永久链接规则复制到其中。

我也玩过

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

【讨论】:

我使用多合一迁移插件迁移了我的网站。并且没有 .htaccess 文件可言。它只是不见了。我刚刚从新的 wp 安装和 viola 复制了 .htaccess,一切正常。【参考方案13】:

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

    创建网站 浏览至http://yoursitename.wpengine.com/wp-json/wp/v2/posts 得到 404 进入管理、设置、永久链接,选择“帖子名称” 点击“保存更改” 浏览至http://yoursitename.wpengine.com/wp-json/wp/v2/posts 成功。页面显示 JSON 响应

【讨论】:

将永久链接切换到帖子名称对我有用 并非所有英雄都穿斗篷【参考方案14】:

我在使用最新的 WordPress 4.7+ 时遇到了这个问题。在我的情况下,REST API 仅在我将永久链接设置更改为“普通”以外的设置后才起作用,这是我安装的默认设置。

【讨论】:

我使用的是 WordPress 4.8.2,这个解决方案也对我有用。如果我改回普通模式,我会再次收到 404 错误。 同样,这也为我做了。这对于为什么 index.php/wp-json 可能会解决是有道理的。 在 Wordpress v4.9.7 上将固定链接切换到 Day and name 固定 404 到 /wp-json/wp/v2/posts【参考方案15】:

更新的新方式

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

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

如果显示 404 错误,则为 update permalinks first(请参阅“分页导航不起作用”部分

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

a2enmod rewrite
sudo service apache2 restart

安装

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

如果您在 4.7 之前:

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

    安装并激活它。

用法

获取所有帖子:

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

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

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

【讨论】:

index.php 帮助我解决了这个问题,就我而言,我只是缺少 apache 中的 mod_rewrite。我也更新了这个答案以包含这个解决方案。 在我的情况下,mode_rewrite 之前已在 16.04 LTS Ubuntu 中安装并激活。然后也发生了 404,然后我像这样在 wp 根目录中编写了一个 .htaccess 文件,并且它开始工作而无需在 API url 上编写 index.php。 # BEGIN WordPress RewriteEngine On RewriteBase /wp/wp-rest-api/ RewriteRule ^index\.php$ - [L] RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule 。 /wp/wp-rest-api/index.php [L] # END WordPress 这只是帮助我解决了一个非常令人沮丧的古腾堡问题。谢谢! 不想对 url 进行硬编码,请使用 wordpress 中的 get_rest_url() 函数。无论您的 URL 是如何配置的,它都能正常工作。 是的,它有效! index.php 似乎是必要的。非常感谢!【参考方案16】:

原来是 Apache 配置有问题。

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

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

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

成功了!

【讨论】:

在我的例子中,mode_rewrite 之前是在 16.04 LTS Ubuntu 中安装和激活的。然后也发生了 404,然后我像这样在 wp 根目录中编写了一个 .htaccess 文件,并且它开始工作而无需在 API url 上编写 index.php。 # BEGIN WordPress RewriteEngine On RewriteBase /wp/wp-rest-api/ RewriteRule ^index\.php$ - [L] RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule 。 /wp/wp-rest-api/index.php [L] # END WordPress 这也解决了我的问题。看起来 htaccess 文件包含重定向并且 mod_rewrite 已启用,但该站点未读取 htaccess 文件。 这解决了我在启用直接链接但给出 404 时的问题。

以上是关于Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API的主要内容,如果未能解决你的问题,请参考以下文章

javascript 禁用WordPress REST API

php WordPress - REST API

php WordPress REST API配方

Wordpress REST API:如何在 WP REST API JSON 文件中获取“纯文字”内容?

Wordpress REST Api:add_action('rest_api_init', callback) 不调用回调

php Wordpress REST API基础知识