Slim 框架总是返回 404 错误

Posted

技术标签:

【中文标题】Slim 框架总是返回 404 错误【英文标题】:Slim Framework always return 404 Error 【发布时间】:2012-04-02 14:36:12 【问题描述】:

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

Coenraets CodingThis

我从那里开始遵循一些步骤。下载 Slim 框架,放置正确的目录和文件。调整启动语句,例如;

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

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

比如我已经完成的清单:

Lo​​adModule rewrite_module modules/mod_rewrite.so -> 启用 超薄 .htaccess:

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

httpd.conf:(Shared Link).

但是,一旦我运行了这个语句;

$app->run();

然后我在我的浏览器上运行它......然后,我在本地主机上测试它时遇到了 404 错误。解决这个问题的方法是什么?

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

【问题讨论】:

对于以后遇到这个问题的人......让我来帮助你解决这个问题!这个问题不仅可以通过编写正确的 url 来解决,还可以通过正确的实现来解决……请访问此站点 github.com/codeguy/Slim 并按照步骤操作,瞧!希望对你有所帮助,祝大家玩得开心! 【参考方案1】:

对于那些因为以前不起作用而仍在搜索答案的人,这对我有用:

RewriteBase /<base_of_your_project>/

【讨论】:

【参考方案2】:

如果您在 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 服务 apache2 重启

Slim API 现在应该可以正常工作了,因为提供的 .htaccess 文件只有在启用了 mod_rewrite 并且不是全新安装的默认设置时才能工作。

如果需要,这里是关闭 mod_rewirte 的方法。

$sudo a2dismod 重写

$sudo 服务 apache2 重启

【讨论】:

【参考方案3】:

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

.htaccess

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

【讨论】:

【参考方案4】:

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

LoadModule rewrite_module modules/mod_rewrite.so

【讨论】:

【参考方案5】:

我在谷歌搜索“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(包括 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 访问该页面。

【讨论】:

如果在添加正确的.htaccess 文件后问题仍然存在,请确保您的虚拟主机配置了AllowOverride 选项,以便可以使用.htaccess 重写规则:&lt;Directory /var/www/html&gt; AllowOverride All Order deny,allow Allow from All &lt;/Directory&gt;跨度> 嗨@cutRateGamer,我使用AllowOverride All,但服务器显示错误500。 Tod-birdsall 答案 + anj 评论 = 解决方案 谢谢,我会一直在挖掘来发现这个解决方案。【参考方案6】:

我认为您的问题出在“资源解析器”上,因为您没有在请求中定义 $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();

请告诉我们是否可以

【讨论】:

【参考方案7】:

您将 index.php 包含在您的文件中是对的,但发生这种情况是因为您的 mod-rewrite 工作不正常 请检查以下链接:

https://github.com/codeguy/Slim

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

【讨论】:

【参考方案8】:

问题解决了!

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

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

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

现在可以了!

我是在找到这些陈述后才意识到的;

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

如果 Slim 找到 URI 与 HTTP 请求 URI 匹配但不匹配的路由 HTTP 请求方法,Slim 会自动返回一个 405 方法 带有 Allow: 标头的不允许响应,其值列出 HTTP 所请求资源可接受的方法。

【讨论】:

只是为了澄清问题,您之前尝试使用的 URL 是什么?

以上是关于Slim 框架总是返回 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

Slim 框架忽略致命错误上的自定义错误处理程序

404错误处理:重定向还是直接404?(摘录)

Github tf - slim 预训练模型动物园在哪里?页面返回 404

Django REST 框架 RetrieveAPIView 获取空的“id”参数并返回 404 错误

在 Slim 框架上发布请求

框架 3.5 的桌面应用程序中的“远程服务器返回错误:(404)”