这些天我使用 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
});
然后,我相应地修改其余部分。
例如我的清单已经完成:
RewriteEngine On RewriteCond%{REQUEST_FILENAME}!-f RewriteRule ^(。*)$ bootstrap.php [QSA,L]
但是,在我执行此声明之后;
$app->run();
我在浏览器上运行它......然后,在我的Localhost上测试时,我得到了 404错误。解决这个问题的解决方案是什么?
仅供参考,这是我目前正在使用的最简单的PHP文件。 (shared Link)
答案 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
这不起作用
和你的.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>/