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原来是 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以上是关于Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API的主要内容,如果未能解决你的问题,请参考以下文章
javascript 禁用WordPress REST API
Wordpress REST API:如何在 WP REST API JSON 文件中获取“纯文字”内容?
Wordpress REST Api:add_action('rest_api_init', callback) 不调用回调