Slim Framework始终返回404错误

时间:2012-03-17 05:51:42

标签: php api frameworks slim

这些天我使用 Slim Framework 作为开发php web api的最简单的工具。 使用这两篇​​文章:

我从那里开始执行一些步骤。下载Slim Framework,放入正确的目录&文件。调整启动语句,例如;

//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
});

然后,我相应地修改其余部分。

例如我的清单已经完成:

  • LoadModule rewrite_module modules / mod_rewrite.so - >启用
  • 苗条.htaccess:
  

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

但是,在我执行此声明之后;

$app->run();

我在浏览器上运行它......然后,在我的Localhost上测试时,我得到了 404错误。解决这个问题的解决方案是什么?

仅供参考,这是我目前正在使用的最简单的PHP文件。 (shared Link)

8 个答案:

答案 0 :(得分:43)

问题解决了!

我的apache实际上是正常的,之前提供的.htaccess文件也正常。

线索是我使用的网址。 以前我使用了无效的URL,因此它返回了404页面错误。 当我尝试通过浏览器访问更新的GET URL时,我才意识到这一点;

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

现在有效!

一旦我发现这些陈述,我就意识到了这一点;

  

如果Slim找不到URI与HTTP请求匹配的路由   URI,Slim将自动返回404 Not Found响应。

     

如果Slim发现的URI的路由与HTTP请求URI匹配,但没有   在HTTP请求方法中,Slim会自动返回405 Method   带有Allow:标头的Not Allowed响应,其值列出HTTP   请求资源可接受的方法。

答案 1 :(得分:25)

我在google搜索时发现了这个帖子,#34; slimframework 404"。这篇文章让我找到了解决问题的方法。

问题

我使用Composer设置了一个带有Slim框架的网站,并使用以下示例代码形式slimframework.com创建一个index.php:

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

然后我尝试使用http://localhost/hello/bob访问该页面。我找回了404 Page Not Found页面。

我可以使用http://localhost/index.php/hello/bob访问该页面。

解决方案

我通过查看/vendor/slim/.htaccess(包含w / Composer Slim安装)和Slim框架文档的URL Rewriting部分找到了解决方案。

我将/vendor/slim/.htaccess文件的副本添加到与index.php文件相同的文件夹中。该文件的内容是:

RewriteEngine On

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

现在我可以使用http://localhost/hello/bob访问该页面。

答案 2 :(得分:5)

您是否正确将index.php包含在您的文件中,但这是因为您无法正常使用mod-rewrite 请检查以下链接:

https://github.com/codeguy/Slim

在“入门”部分中,您可以看到如何配置服务器(如果您使用的是apache / lighttpd / ngynx)

答案 3 :(得分:1)

对我来说问题是我忘记在我的文档根目录中提供.htaccess文件。

<强>的.htaccess

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

答案 4 :(得分:0)

我认为你的问题出现在“资源解析器”中,因为你没有在请求中定义$ id参数,所以请试试这个:

//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();

请告诉我们是否可以

答案 5 :(得分:0)

此外mod_rewrite.so模块必须加载到httpd.conf,否则您将收到错误500.

LoadModule rewrite_module modules/mod_rewrite.so

答案 6 :(得分:0)

如果您在Ubuntu 16.04上使用Slim,那么您将收到404错误。从上面的Tod Birdsall尝试这个测试:

如果有效

http://localhost/index.php/hello/bob

这不起作用

http://localhost/hello/bob

和你的.htaccess文件在index.php所在的目录中,配置如下:

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

你仍然在Apache上遇到404错误。

尝试按如下方式启用Apache mod_rewrite并重新启动Apache:

$ sudo a2enmod重写

$ sudo service apache2 restart

Slim API现在可以正常工作,因为提供的.htaccess文件只有在启用mod_rewrite时才有效,而不是干净安装时的默认值。

如果需要,可以关闭mod_rewirte。

$ sudo a2dismod rewrite

$ sudo service apache2 restart

答案 7 :(得分:0)

对于那些因为以前没有工作而仍然搜索答案的人来说,这对我有用:

RewriteBase /<base_of_your_project>/