52

I am using the following plugin Json Rest API.

To test the plugin the documentation states that I should just use:

$ curl -i http://testpress-maxximus.rhcloud.com/wp-json/
HTTP/1.1 404 Not Found
Date: Sat, 24 May 2014 07:01:21 GMT
Server: Apache/2.2.15 (Red Hat)
Content-Length: 303
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /wp-json/ was not found on this server.</p>
<hr>
<address>Apache/2.2.15 (Red Hat) Server at testpress-maxximus.rhcloud.com Port 8
0</address>
</body></html>

As you can see nothing is found by the URL. Any recommendations if there is a problem with the API or wordpress?

I appreciate your reply

Carol.Kar
  • 4,581
  • 36
  • 131
  • 264
  • 5
    Do you have [pretty permalinks](http://codex.wordpress.org/Using_Permalinks#Using_.22Pretty.22_permalinks) enabled? – brasofilo May 24 '14 at 21:38

10 Answers10

69

The current version of REST api for sites with pretty permalinks not enabled, the url

    yoursite.com/?rest_route=/ 

will work .

Anoop D
  • 1,522
  • 18
  • 25
42

The WordPress JSON API depends on pretty permalinks, make sure you have them enabled for the site.

Eric Andrew Lewis
  • 1,256
  • 2
  • 13
  • 22
  • 9
    aka - go to **Settings > Permalinks** and change the setting to **"Post name"** to get it to work for you. I would be cautious about doing this if you already have a live site as it will modify a lot of your urls. – mike Jan 18 '19 at 17:07
  • But see the comment by @Mohammad AlBanna https://stackoverflow.com/a/57403026/516537 – iND Nov 04 '19 at 03:30
  • I had permalinks set to post-name already but was seeing the error. So I switched to a different setting and then switched back to post-name which fixed it for me – ravin001 Nov 15 '22 at 17:24
32

In my case, I got this error after installing/configuring apache2 on my local linux machine. I finally found the error to be cause by the rewrite module not being enabled which I fixed using,

sudo a2enmod rewrite

as well as ensuring that my apache2.conf file (located in the folder /etc/apache2) has its<Directory> directive 'AllowOverride' set to all rather than none, from

<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>

to

<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>

then I restarted apache2 service and the problem was resolved.

Aurovrata
  • 2,000
  • 27
  • 45
27

I have faced this issue several times . The solution is this :

Login into your Wordpress site: example.com/wp-admin

  1. Then click on settings

  2. Then click on permalinks

  3. Then set permalinks to "post-name"

  4. Save Changes

Screen shot illustrating steps outlined above

Community
  • 1
  • 1
15

Sometimes the solution is crazy and easy! Go to the permalink settings by moving to Admin -> Settings -> Permalinks...then just hit Save Changes without doing anything else! This refreshes the memory of WordPress.

Why is that? For a situation I had before, I had changed the main website URL so I had to refresh the permalinks as well.

Mohammed AlBanna
  • 2,350
  • 22
  • 25
  • I think this was just your situation, what is probably more important is what you had selected, perhaps "Post name" – Max Carroll Oct 08 '19 at 09:04
  • 1
    @MaxCarroll this solution worked for me as well. I think it is more important to flush/reset the references. Clicking "Save Changes" affects database even if no visual changes are made. – iND Nov 04 '19 at 03:26
  • worked for me too, thanks! – éniocarlos Aug 31 '23 at 10:41
6

I had this same issue and wanted to post my solution in case anyone else comes across this answer and the other answers don't solve the issue, as this happened with me.

In my case I didn't have a .htaccess file with Wordpress' default mod_rewrite rules:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

This solved the issue for me. Per the documentation:

WordPress uses this file to manipulate how Apache serves files from its root directory, and subdirectories thereof. Most notably, WP modifies this file to be able to handle pretty permalinks.

logos_164
  • 736
  • 1
  • 13
  • 31
  • Perfect answer, but note that if this is the solution, you have a serious problem with your configuration. This can easily happen if you have migrated a WordPress installation to another place and forgot to do the stuff in one of the other answers: pressing "save changes" in settings->permalinks. – Klaassiek Jan 16 '23 at 02:37
3

I was running WP on a local dev environment in a subdomain of localhost (eg mysite.localhost:8888)

The solution for me was to update the virtual host config in httpd-vhosts.conf to set directory options, similarly to Aurovrata's answer:

<VirtualHost *:8888>    
    ServerName mysite.localhost    
    DocumentRoot "/Users/myusername/mysite"    
    <Directory /Users/myusername/mysite>
        Options Indexes FollowSymLinks
        AllowOverride All        
    </Directory>
</VirtualHost>
JMac
  • 375
  • 4
  • 15
1

Faced a similar issue, turns out that Apache's mod_rewrite module wasn't enabled. Worked fine after enabling it.

Gaurav B
  • 661
  • 8
  • 9
1

For me, this issue was due to the WP site being developed at the root of a staging URL (ie example.com) but when put live it was installed in a sub-directory (ie example.org/wp)

Before I could make the suggestion from this comment work I had to chmod 664 .htaccess to make it writable by Wordpress. I then resaved the Permalinks as suggested and Wordpress updated the RewriteBase in .htaccess to /wp

b4tch
  • 959
  • 9
  • 16
0

If you have correctly installed the plugin, be sure to flush the rewrite rules.

This can be accomplished with the wp-cli: http://wp-cli.org/commands/rewrite/flush/

Austin Pray
  • 4,926
  • 2
  • 22
  • 30