72

在使用 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
  • 阿帕奇 2.2.22
  • Ubuntu 12.04.5

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

4

16 回答 16

160

更新的新方式

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

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

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

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

a2enmod rewrite
sudo service apache2 restart

安装

REST API 包含在 WordPress 4.7 中!不再需要插件,只需安装最新版本的 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
于 2016-01-12T12:24:56.187 回答
44

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

于 2017-09-20T15:48:49.110 回答
38

在 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 响应
于 2018-01-26T07:35:00.783 回答
21

原来是Apache配置有问题。

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

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

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

那成功了!

于 2016-01-19T22:34:27.643 回答
9

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

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

于 2019-09-23T10:16:59.393 回答
6

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

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

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

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

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

永久链接

选择帖子名称

来源

于 2021-05-14T07:01:47.117 回答
5

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

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

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

  3. 替换AllowOverride Noneto的所有情况AllowOverride All

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

于 2019-01-19T16:29:13.260 回答
4

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

我也玩过

  • 设置 > 固定链接
  • 单击“保存”后,通过永久链接页面底部的代码手动更新 .htaccess
  • 添加“index.php”作为其他答案之一建议
  • 确保mod rewrite已通过a2enmod
于 2018-02-21T23:51:36.443 回答
4

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

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

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

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

于 2019-09-22T21:07:54.203 回答
3

通过 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
于 2021-04-02T14:45:18.660 回答
1

我已将 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
于 2018-10-09T15:59:17.143 回答
1

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

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

于 2019-09-23T18:59:57.033 回答
0

我在 localhost 上遇到了同样的问题,我通过在 .htaccess 文件中设置RewriteBase Path 解决了这个问题,该文件可在 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>
于 2020-09-07T18:52:24.730 回答
0

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

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

于 2021-03-14T07:48:41.327 回答
0

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

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

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

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

于 2021-06-09T07:57:11.230 回答
0

对我来说,在新网站上我没有启用 Nginx 漂亮链接设置我添加这个来location /阻止

        try_files $uri $uri/ /index.php?$args; 
于 2022-01-29T04:37:41.460 回答