Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Slim框架始终返回404错误_Php_Api_Frameworks_Slim - Fatal编程技术网

Php Slim框架始终返回404错误

Php Slim框架始终返回404错误,php,api,frameworks,slim,Php,Api,Frameworks,Slim,现在,我正在使用slimframework作为开发PHPWebAPI的最简单工具。 使用这两篇文章: 我从那里开始遵循一些步骤。下载Slim框架,放置正确的目录和文件。调整初始声明,如: //1. Require Slim require('Slim/Slim.php'); //2. Instantiate Slim $app = new Slim(); //3. Define routes $app->get('/books', function ($id) { //

现在,我正在使用slimframework作为开发PHPWebAPI的最简单工具。 使用这两篇文章:

我从那里开始遵循一些步骤。下载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_模块/mod_rewrite.so->已启用
  • Slim.htaccess:
RewriteCond%{REQUEST_FILENAME}上的RewriteEngine-f重写规则 ^(.*)$bootstrap.php[QSA,L]

  • httpd.conf:
但是,有一次我发表了这个声明

$app->run();
我在我的浏览器上运行它。。。。然后,在本地主机上测试时,我得到了404错误。解决这个问题的办法是什么

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

问题解决了

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

线索是我使用的URL。 以前我使用了无效的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方法 不允许使用其值列出HTTP的Allow:标头响应 请求的资源可接受的方法


您在文件中包含index.php是正确的,但这是因为您的mod rewrite工作不正常 请查看以下链接:


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

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

请告诉我们是否可以

我在谷歌搜索“SlimFramework404”时发现了这篇文章。这篇文章使我找到了解决问题的办法

问题

我使用slimframework建立了一个站点,并使用以下示例代码表单slimframework.com创建了index.php:

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

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

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

LoadModule rewrite_module modules/mod_rewrite.so

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

.htaccess

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

如果你在Ubuntu 16.04上使用Slim,你会得到404错误。从上面的Tod Birdsall中尝试此测试:

如果这行得通的话

这是行不通的

以及与index.php位于同一目录中的.htaccess文件,配置如下:

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteRule ^ index.php [QSA,L]
    </IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[QSA,L]
在Apache上仍然会出现404错误

尝试按如下方式打开Apache mod_rewrite并重新启动Apache:

$sudo a2enmod重写

$sudo服务apache2重新启动

Slim API现在应该可以正常工作了,因为提供的.htaccess文件只有在启用mod_rewrite时才能工作,而在干净的安装中这不是默认的

这里是如何关闭mod_rewirte,如果需要的话

$sudo a2dismod重写


$sudo service apache2 restart

对于那些因为“上一步”不起作用而仍在搜索答案的人,这对我很有用:

RewriteBase /<base_of_your_project>/
RewriteBase//

为了澄清问题,您以前尝试使用的URL是什么?如果在添加正确的
.htaccess
文件后问题仍然存在,请确保您的虚拟主机配置了
AllowOverride
选项,以便可以使用.htaccess重写规则:
AllowOverride AllOrder deny,allow allow from All
Hi@cutRateGamer,我使用AllowOverride All,但服务器显示错误500。Tod-birdsall answer+anj comment=解决方案谢谢,将一直在挖掘以发现此解决方案。对于将来遇到此问题的人。。。让我来帮你解决这个问题!这个问题不仅可以通过编写正确的url来解决,还可以通过正确的实现来解决。。。请访问此网站并按照步骤操作,瞧!你会得到它的希望它有帮助,有一个伟大的每个人!
RewriteBase /<base_of_your_project>/