PHP Fat Free Frame工作路由不起作用

时间:2018-03-11 07:18:47

标签: php fat-free-framework

RewriteEngine On
RewriteBase /buildzone_admin/
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php [L,QSA]

以上是我的Htaccess路由代码。

<?php

$main = require __DIR__ . '/lib/base.php';
$main->set('AUTOLOAD', 'inc/');

F3::set('CACHE', false);
F3::set('DEBUG', 3);
F3::set('UI', 'ui/'); 


$main->route('GET /', 'index');


$main->route('POST /show', 'Test->show');

$main->route('POST /loginCheck', 'BuildzoneAuth->authenticate');

F3::set('DB', new DB(
'mysql:host=localhost;port=3306;dbname=sunkomen_buildzone', 
'123', '123'
    )
);


function index() 
{
    F3::set('modules', array(
    'apc' =>
    'Cache engine',
    'gd' =>
    'Graphics plugin',
    'hash' =>
    'Framework core',
    'imap' =>
    'Authentication',
    'json' =>
     'Various plugins',
     'ldap' =>
     'Authentication',
     'memcache' =>
     'Cache engine',
     'mongo' =>
     'M2 MongoDB mapper',
     'pcre' =>
     'Framework core',
     'pdo_mssql' =>
     'SQL handler, Axon ORM, Authentication',
     'pdo_mysql' =>
     'SQL handler, Axon ORM, Authentication',
     'pdo_pgsql' =>
     'SQL handler, Axon ORM, Authentication',
     'pdo_sqlite' =>
     'SQL handler, Axon ORM, Authentication',
     'session' =>
     'Framework core',
     'sockets' =>
     'Network plugin',
     'xcache' =>
     'Cache engine'
         )
     );
    echo Template::serve('index.htm');

 }

F3::run();
?>

以上是我的PHP代码。 问题是,当我尝试访问任何文件时,它说404文件未找到。

示例:

  

domain.com/buildzone_admin /

然后它的工作很精细。

但是

  

domain.com/buidzone_admin/logincheck

然后它表示找不到404文件,并且对于任何类型的方法GET或POST都是相同的。它不工作。

请让我知道我错过了什么。

2 个答案:

答案 0 :(得分:0)

首先,您没有为我们提供足够的信息。

但是,在这种情况下,因为您说domain.com/buildzone_admin/有效,我认为您的.htaccess文件会附带问题。

RewriteBase仅在您只能将.htaccess放在站点根目录的情况下才有用。否则,您可能最好将不同的.htaccess文件放在站点的不同目录中,并完全省略RewriteBase指令。

我们来看看。

您设置了RewriteBase /buildzone_admin/。我认为您正在buildzone_admin文件夹中构建一个站点,该文件夹是主域根目录的子文件夹。如果是,并且您的.htaccess文件与index.php文件位于同一位置,则无需设置RewriteBase /buildzone_admin/,只需设置RewriteBase /

因此,其解决方案是将RewriteBase /buildzone_admin/更改为RewriteBase /

其次,为了测试您的配置,您应该在使它们变得复杂之前提供更简单的路由。例如:GET-&gt; POST,function-&gt;处理程序字符串

$main->route('GET /test1', function() {echo "test with function worked";});

- &gt;打开浏览器访问domain.com/buildzone_admin/test1,然后查看是否有效

带有$main->route('GET /test2', 'Test->get');方法的

get只是回显另一个字符串。

- &gt;打开浏览器访问domain.com/buildzone_admin/test2,然后查看是否有效

$main->route('POST /test3', 'Test->post');使用post方法只需var_dump(\Base::instance()->get('POST'))即可看到您的应用可以通过表单抓取$_POST

- &gt;打开POSTMAN,使用POST方法测试,正文为form-data格式,a1a2发布字段,然后向domain.com/buildzone_admin/test3发送请求

要测试其他方法(例如&#34; PATCH&#34;),请确保阅读F3文档。您可以尝试使用{Base :: instance-&gt; get(&#39; BODY&#39;)和Content-Type: application/json标头, 等

希望这有帮助!

答案 1 :(得分:0)

  1. 您只定义了一个 (GET) 路由,因此如果您尝试加载任何其他路由,您将收到 404。它完全按照您定义的方式工作。

  2. 我建议您使用 lambda 函数来定义您的路由,如下所示:

$main->route('GET /[route]/@arg', function($main,$params) use (&$[classname]) {
  $arg = $params['arg'];
  // do something
  echo \Template::instance()->render("template_file");
});
  1. F3::set 不再有效。而是使用
$main->set();
  1. 您也可以使用以下语法:
$main = \Base::instance();
  1. 必须定义每个路由,例如:
$main->route('GET /show/@arg', function($main,$params) use (&$[classname]) {
});

$main->route('GET /list/@arg', function($main,$params) use (&$[classname]) {
});