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

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

我从那里开始遵循一些步骤。下载 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]

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

$app->run();

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

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

【问题讨论】:

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

标签: php api frameworks 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 是什么?
              猜你喜欢
              • 2016-01-01
              • 2014-05-29
              • 1970-01-01
              • 2012-09-02
              • 1970-01-01
              • 1970-01-01
              • 2018-07-15
              • 2017-01-18
              • 2012-08-16
              相关资源
              最近更新 更多