2012-03-17 116 views
23

这几天我正在使用Slim Framework作为开发php web api的最简单工具。 使用这两篇​​文章:Slim Framework总是返回404错误

我遵循一些步骤从那里。下载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模块/ mod_rewrite.so - >启用
  • 修身的.htaccess:

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

但是,之后当我运行该语句;

$app->run(); 

而且我在我的浏览器上运行它....然后,我得到404错误,而在我的本地测试它。有什么解决方案来解决这个问题?

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

回答

42

问题解决了!

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

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

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

现在工作!

我刚刚意识到它,一旦我发现这些语句;

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

如果超薄找到具有匹配HTTP请求的URI路由URI但不 HTTP请求方法,苗条将自动返回一个405方法具有允许 不允许响应:其值列表HTTP 方法,这些方法对于可接受的报头请求的资源。

+9

只是为了澄清这个问题,什么是您试图之前,使用的网址是什么? – RPDeshaies 2014-01-04 20:15:28

5

你说得对,包括你的文件中的index.php,但发生,因为你不与你的MOD-重写 请查看以下链接正常工作:

https://github.com/codeguy/Slim

在入门部分,你可以看到如何配置你的服务器(如果你使用的是Apache/lighttpd/ngynx)

0

我认为你的问题是在“资源分析器”,因为你没有定义$ id请求中的参数,请Y本:

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

请告诉我们,如果这是确定

21

我发现这个职位,而谷歌搜索 “slimframework 404”。这篇文章让我解决了我的问题。

的问题

我成立了一个位点上的超薄框架使用Composer并创建下面的示例代码形式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页面未找到页面。

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

我发现该溶液通过查看/vendor/slim/.htaccess(包括瓦特/作曲苗条安装)和超薄框架文档的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

+6

如果在添加正确的'.htaccess'文件后问题仍然存在,请确保您的虚拟主机配置了'AllowOverride'选项,以便可以使用.htaccess重写规则: \t的AllowOverride所有 \t订单拒绝,允许 \t从所有 \t' – anj 2015-06-26 16:48:40

+0

嗨@cutRateGamer允许,我使用所有的AllowOverride但服务器给我错误500 – 2016-02-11 12:22:43

+1

托德 - 伯兹奥尔答案+ ANJ评论表示溶液 – NachPD 2017-10-17 14:00:28

0

此外mod_rewrite.so模块必须在httpd.conf加载或您会收到错误500

LoadModule rewrite_module modules/mod_rewrite.so 
1

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

的.htaccess

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

如果你在Ubuntu上使用16苗条。04,你会得到404错误。从上面托德伯兹奥尔你可以做个试验:

如果这个工程

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

这行不通

http://localhost/hello/bob

和.htaccess文件在同一目录索引。 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的服务的Apache2重启

苗条的API应该正常现在的工作是提供的.htaccess文件会只有在启用了mod_rewrite的情况下才有效,而不是干净安装的默认值。

这里是如何关闭mod_rewirte,如果你需要。

$ sudo的a2dismod改写

$ sudo的服务的Apache2重启