【问题标题】:Flight PHP Framework Routing dont work飞行 PHP 框架路由不起作用
【发布时间】:2018-09-21 15:15:01
【问题描述】:

我今天开始使用 PHP Framework Flight。现在我从他们的主页下载了“飞行骨架”。

这是文件夹结构的图像:

这是index.php 文件中的内容:

<?php

    require 'flight/Flight.php';
    
    Flight::route('/', function(){
        echo "Hello World";
    });

    Flight::route('/categorie', function(){
        echo "Hello World";
    });

    Flight::start();

?>

如果我启动浏览器并输入 URL http://localhost/firstflight/ 我会显示“Hello World”。但是,如果我输入 http://localhost/firstflight/categorie,则会显示错误 404 Webpage not found...。我该如何解决这个问题?

这是.htaccess文件中的代码:

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

【问题讨论】:

  • 在子目录中运行时需要做一些调整(确实应该只创建一个虚拟主机并这样运行)stackoverflow.com/questions/20890210/…
  • “你真的应该……”是什么意思?
  • 您可以创建一个虚拟主机(在 apache、nginx 等中),它将某些域(即 flightapp.local)映射到特定文件夹(yourwww/firstflight)。那么您只需将127.0.0.1 flightapp.local 添加到您的计算机主机文件中,您就可以访问http://flightapp.local
  • @JimL 现在我有点困惑。我目前正在运行 xamp,并且可以访问该网页。问题是,当我尝试打开路线http://localhost/firstflight/categorie 时显示错误(404 Error Page)。另一条路线http://localhost/firstflight/ 运行良好。
  • 是的,您要么必须进行一些更改以使其在子目录中工作,要么您必须没有子目录(即通过使用虚拟主机)

标签: php .htaccess frameworks


【解决方案1】:

我遇到了同样的问题,但是当我配置 apache2.conf 文件 (/etc/apache2) 时它可以工作。 在那里你必须改变 AllowOverride。

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

然后我的 .htaccess 文件看起来像这样

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

就是这样。

【讨论】:

    【解决方案2】:

    这对我有用。在您的 .htaccess 文件中,粘贴以下代码行。

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>
    
        RewriteEngine On
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)/$ /$1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

    它与 Laravel 中使用的相同 - 一个更高级的 PHP 框架。

    确保 .htaccess 与您的 index.php 文件位于同一文件夹/目录/级别。

    【讨论】:

      【解决方案3】:

      在我的例子中,默认 apache2.conf 导致 Flight 失败。

      不得不改变

      <Directory /var/www/>
          AllowOverride None
      </Directory>
      

      <Directory /var/www/>
          AllowOverride all
      </Directory>
      

      这样我的.htaccess 实际应用了。 然后一切正常。

      【讨论】:

        【解决方案4】:

        路由按照定义的顺序进行匹配。第一个匹配请求的路由将是被调用的路由。

        您可以在路由中使用正则表达式:

        Flight::route('/user/[0-9]+', function(){
        
            // This will match /user/1234
        });
        

        【讨论】:

          猜你喜欢
          • 2020-01-10
          • 1970-01-01
          • 2015-06-23
          • 1970-01-01
          • 1970-01-01
          • 2013-08-31
          • 2017-12-16
          • 1970-01-01
          • 2013-03-29
          相关资源
          最近更新 更多