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
);
然后,我相应地修改其余部分。
比如我已经完成的清单:
LoadModule rewrite_module modules/mod_rewrite.so -> 启用 超薄 .htaccess:httpd.conf:(Shared Link).RewriteEngine On RewriteCond %REQUEST_FILENAME !-f RewriteRule ^(.*)$ bootstrap.php [QSA,L]
但是,一旦我运行了这个语句;
$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 重写规则:<Directory /var/www/html> AllowOverride All Order deny,allow Allow from All </Directory>
跨度>
嗨@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 错误的主要内容,如果未能解决你的问题,请参考以下文章
Github tf - slim 预训练模型动物园在哪里?页面返回 404