I have been using the WordPress REST plugin WP-API for months now while developing locally with XAMPP. I recently migrated my site to an EC2 instance and everything is working fine except I now get a 404 with the following message whenever I try to access any endpoint on the API:
The requested URL /wordpress/wp-json/ was not found on this server
Pretty permalinks are enabled with the following structure http://.../wordpress/sample-post/
which works fine when navigating to a specific post in the browser.
Here are some details about my setup:
- WordPress 4.4.1
- Not a Multisite
- WP REST API plugin 2.0-beta9
- Apache 2.2.22
- Ubuntu 12.04.5
Any help would be greatly appreciated as I have gone through SO and the WP Support forums for several hours and am out of ideas. Thank you!
UPDATED NEW WAY
I also faced similar problem in a local project. I used
index.php
after my project url and it worked.If it displays a 404 error then update permalinks first (see “Paged Navigation Doesn’t Work” section
If it works, maybe you need to enable
mod_rewrite
, on ubuntu:Installation
If you’re before 4.7:
Download plugin from here: http://v2.wp-api.org/
install and activate it.
Usage
To get all posts:
For the search functionality, searching for test post looks like this:
I had this problem with the latest WordPress 4.7+. In my case the REST API only worked after I changed the permalinks setting to something other than “Plain”, which was the default setting for my installation.
On WPEngine and WP 4.9.2 I only had to update permalinks to get fresh, newly installed site to return v2 API calls. What I did:
It turned out to be a problem with the Apache configuration.
First, I deleted the
.htaccess
file in the root wordpress directory.Next, I navigated to
/etc/apache2/sites-enabled
and opened000-default
All of the
AllowOverride
variables were set to None, which I replaced withAll
.That did the trick!
It is the file permission error, apply the following solution:
Edit this file
/etc/apache2/apache2.conf
Change
/var/www/
Permissions from “None” to “All”Restart the
apache2
server.First you’ve to Check if the WordPress REST API is enabled or not
The best way to check is to visit this URL:
https://yoursite.com/wp-json
.If you see some JSON response, REST API is enabled.
If itâs showing some error page or returns to home page, REST API is not enabled. Then we’ve to enable it first.
In this case, you’ve to Enable Permalinks
https://yoursite.com/wp-json
)https://yoursite.com/wp-admin/options-permalink.php
).htaccess
Please see the helping screenshots below:
Source
I solved this issue through following steps:
Navigate to ..Apache24confhttpd.conf and search for
LoadModule rewrite_module modules/mod_rewrite.so
.Enable rewrite module by removing the
#
mark.Replace all the cases of
AllowOverride None
toAllowOverride All
.Don’t forget to restart apache server. 🙂
Adding “AllowOverride All” (as hinted by other authors before) to my apache virtual host configuration on my Ubuntu server via SSH did the trick for me:
and also (if you use letsencrypt):
The files should then look like:
Don’t forget to disable and re-enable the site and reload apache to apply the new configuration:
I had to manually make a
.htaccess
, set it tochmod 664
, and copy the permalink rules into it.I also played around with
mod rewrite
was enabled viaa2enmod
I found that
mysite/wp-json/
was not working, butmysite/?rest_route=/
was normal. This was breaking some, but not all, the REST API features used on my site.The answer to this turned out to be a recent change to how I was running my server. This had broken REST API but this was not apparent until later.
I had changed this domain from using Apache to using nginx, and I had not correctly transferred the
.htaccess
customisations. The quick solution to this problem was therefore to change back to using Apache. This restored the site to working order immediately.I will be changing this domain back to nginx in the future but when I do, I will test it and be careful not to affect the REST API.
On WordPress 6
You can use this URL and no need for
URL Rewrite
and no need to change yourPermalink settings
(I saw Gutenberg editor is using this URL to access REST)I had moved the WordPress install from a subdirectory to another, so in my case the problem was due to the WordPress config in the
.htaccess
files. It was trying to redirect every page but the homepage to the old directory. It was just a matter of updatingolddir
tonewdir
…This tripped me up more than once so I thought I’d put it here…
I faced the same problem when I migrated my site from cPanel to Google Cloud Compute Engine Instance; problem was of file permissions which was initially caused due to difference in PHP versions of current deployment from previous deployment.
Here is the fix How to deal with GCP WordPress error “This page isnât working example.com is currently unable to handle this request. HTTP ERROR 500
I was facing same issue on localhost and I solved this issue with just set RewriteBase Path in .htaccess file which is available at root folder of WordPress project setup.
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..
If you want to see all the available endpoints use this –
https://developer.wordpress.com/docs/api/console/
Remember to replace
**$site**
with your domainFind the latest documentation here –
https://developer.wordpress.com/docs/api/
I read through a whole bunch of articles and eventually discovered there was a force site to be https plugin installed and activated on my local, however there is no certificate set up. It was making the requests for https when I should have had the https plugin deactivated.
Once deactivated, I was able to make connections to REST API.
Not a very in depth answer but it is was my answer. Hope this saves someone some time!
If you are on Windows OS change the
Permalink Settings
as follows:Custom structure: /index.php/%postname%/
If you have tried the other solutions on this page and they haven’t worked, I had success with checking for additional .htaccess files in the root folder above your public_html folder (or wherever you have installed WordPress).
I found an extra one which may have come from a previous installation or been accidentally moved there – it was giving conflicting instructions to the ‘real’ .htaccess file. Deleting it fixed the problem for me.
For me on new website I didn’t had Nginx pretty links setting enabled I add this to
location /
blockTry to remove any
order deny,allow
deny from all
allow from …
from you .htaccess.