飞行PHP框架路由不起作用

时间:2016-03-15 19:52:44

标签: php .htaccess frameworks

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

这是文件夹结构的图像:

enter image description here

这是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]

4 个答案:

答案 0 :(得分: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]

这就是全部。

答案 1 :(得分:0)

这对我有用。在.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文件位于同一文件夹/目录/级别。

答案 2 :(得分:0)

就我而言,默认apache2.conf导致航班失败。

不得不改变

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

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

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

答案 3 :(得分:0)

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

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

Flight::route('/user/[0-9]+', function(){

    // This will match /user/1234
});