Home » Php » Slim Framework always return 404 Error

Slim Framework always return 404 Error

Posted by: admin December 8, 2017 Leave a comment

Questions:

These days i’m using Slim Framework as my simplest tool to develop the php web api.
Using these two articles:

I follow some of the steps from there. Downloading the Slim Framework, putting the correct directory & files. Adjusting the initation statements such as;

//1. Require Slim
require('Slim/Slim.php');

//2. Instantiate Slim
$app = new Slim();

//3. Define routes
$app->get('/books', function ($id) {
    //Show book with id = $id
});

And then, I modify the rest accordingly.

Such as my checklist that already done:

  • LoadModule rewrite_module modules/mod_rewrite.so -> enabled
  • Slim .htaccess:

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule
^(.*)$ bootstrap.php [QSA,L]

But, after Once I run this statement;

$app->run();

And I run it on my browser…. then, I got 404 Error while testing it on my Localhost. What’s the solution for fixing that?

FYI, here is my simplest PHP file that i’m currently using it. (shared Link)

Answers:

Problem is solved!

My apache is actually normal, and the .htaccess file provided earlier also normal.

The clue is the URL that I used.
Previously I used the invalid URL, thus it returned the 404 page error.
I just realized it when I Tried to access the newer GET URL via browser with this one;

http://localhost/dev/index.php/getUsers/user1

and now that works!

I just realized it once I found these statements;

If Slim does not find routes with URIs that match the HTTP request
URI, Slim will automatically return a 404 Not Found response.

If Slim finds routes with URIs that match the HTTP request URI but not
the HTTP request method, Slim will automatically return a 405 Method
Not Allowed response with an Allow: header whose value lists HTTP
methods that are acceptable for the requested resource.

Questions:
Answers:

I found this post while googling “slimframework 404”. The post led me to a solution to my problem.

The Problem

I set up a site with the Slim framework using Composer and create an index.php with the following example code form slimframework.com:

<?php
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
    echo "Hello, $name";
});
$app->run();

Then I try to access the page using http://localhost/hello/bob. I get back a 404 Page Not Found page.

I was able to get to access the page using http://localhost/index.php/hello/bob.

The Solution

I found the solution by looking at /vendor/slim/.htaccess (included w/ Composer Slim install) and the URL Rewriting section of the Slim framework documentation.

I added a copy of the /vendor/slim/.htaccess file to the same folder as my index.php file. The contents of the file are:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L] 

Now I can access the page using http://localhost/hello/bob.

Questions:
Answers:

You’re right about to include the index.php on your file, but that happen because you’re not working properly with your mod-rewrite
Please check the following link:

https://github.com/codeguy/Slim

In the Get Started part you could see how to configure your server (in case that you were using apache / lighttpd / ngynx)

Questions:
Answers:

I think your problem is at the “Resource parser” because you are no defining $id parameter at the request so, please, try this:

//1. Require Slim
require('Slim/Slim.php');

//2. Instantiate Slim
$app = new Slim();

//3. Define routes
$app->get('/books/:id/', function ($id) {
    echo json_encode( getBook($id) );
});

// some stuff
$app->run();

Please, tell us if it’s ok

Questions:
Answers:

Additionally mod_rewrite.so module must be loaded in httpd.conf or you will receive error 500.

LoadModule rewrite_module modules/mod_rewrite.so

Questions:
Answers:

For me the problem was that I’d forgotten to provide a .htaccess file in my document root.

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

Leave a Reply

Your email address will not be published. Required fields are marked *