【问题标题】:Wordpress REST API (wp-api) 404 Error: Cannot access the WordPress REST APIWordpress REST API (wp-api) 404 错误:无法访问 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 插件并再次激活,然后检查。
  • 你最近更新了你的wordpress吗?因为从 4.4 开始,他们对 REST API 进行了很多更改
  • 大家好,感谢您的意见,但这些都没有解决我的问题。 @Milap 在启用永久链接后已经尝试停用(和卸载),但这没有用。 GitHub 问题似乎表明该问题已在 beta7 中得到解决,但我使用的是 beta9。
  • @Christophvh 我正在使用最新版本的 WordPress 4.4.1

标签: wordpress apache .htaccess wordpress-rest-api wp-api


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    如果您想查看所有可用的端点,请使用 - 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 未启用。然后我们必须先启用它。

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

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

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

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

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

                3. AllowOverride None的所有case替换为AllowOverride All

                4. 别忘了重启 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 调用。我做了什么:

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

                    【讨论】:

                    • 将永久链接切换到帖子名称对我有用
                    • 并非所有英雄都穿斗篷
                    【解决方案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 之前:

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

                    2. 安装并激活它。

                    用法

                    获取所有帖子:

                    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 时的问题。
                    猜你喜欢
                    • 2018-09-26
                    • 2018-01-09
                    • 1970-01-01
                    • 2021-12-09
                    • 2017-09-12
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-07-08
                    • 2015-11-12
                    相关资源
                    最近更新 更多