Slim Framework始终返回404错误

gum*_*ruh 24 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
});
Run Code Online (Sandbox Code Playgroud)

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

比如我已经完成的清单:

  • LoadModule rewrite_module modules/mod_rewrite.so - >启用
  • 修身.htaccess:

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

但是,在我发表这个声明之后;

$app->run();
Run Code Online (Sandbox Code Playgroud)

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

仅供参考,这是我目前正在使用的最简单的PHP文件.(共享链接)

gum*_*ruh 45

问题解决了!

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

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

http://localhost/dev/index.php/getUsers/user1
Run Code Online (Sandbox Code Playgroud)

现在有效!

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

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

如果Slim发现URI与HTTP请求URI匹配但不是HTTP请求方法的路由,则Slim将自动返回405 Method Not Allowed响应,其中包含Allow:标头,其值列出了所请求资源可接受的HTTP方法.

  • 只是为了澄清问题,您之前尝试使用的URL是什么? (12认同)

Tod*_*all 27

我在google搜索"slimframework 404"时发现了这篇文章.这篇文章让我找到了解决问题的方法.

问题

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

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

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

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

解决方案

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

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

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L] 
Run Code Online (Sandbox Code Playgroud)

现在我可以使用了http://localhost/hello/bob.

  • 如果在添加正确的`.htaccess`文件后问题仍然存在,那么请确保您的虚拟主机配置了`AllowOverride`选项,以便可以使用.htaccess重写规则:`<Directory/var/www/html> AllowOverride All订单拒绝,允许全部允许</ Directory>` (8认同)
  • Tod-Birdsall答案+ Anj评论=解决方案 (2认同)

Dar*_*ico 5

你正确地将index.php包含在你的文件中,但是因为你的mod重写没有正常工作,请检查以下链接:

https://github.com/codeguy/Slim

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