【问题标题】:PHP Fat Free Frame work Routing is not workingPHP Fat Free Frame work 路由不工作
【发布时间】:2018-03-11 07:18:47
【问题描述】:
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 File not found 并且对于任何类型的方法 GET 或 POST 都是相同的。它不工作。

请让我知道我缺少什么。

【问题讨论】:

  • 同时检查类是否存在于 lib/
  • @LawrenceCherone 是的,我已经定义为 POST 方法。
  • 检查是否为您的 apache 服务器主机配置设置了“AllowOverride All”;)

标签: php fat-free-framework


【解决方案1】:

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

但是,在这种情况下,因为您说 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->POST、函数->处理程序字符串

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

->打开浏览器访问domain.com/buildzone_admin/test1然后看看是否可行

$main-&gt;route('GET /test2', 'Test-&gt;get');get 方法只是回显另一个字符串。

->打开浏览器访问domain.com/buildzone_admin/test2然后看看是否可行

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

->打开POSTMAN,用POST方法测试,body为form-data格式,a1,a2 post字段然后发送请求到domain.com/buildzone_admin/test3

要测试其他方法(如“PATCH”),请务必阅读 F3 文档。您可以尝试使用带有 Content-Type: application/json 标头的 \Base::instance->get('BODY'), 等等

希望对您有所帮助!

【讨论】:

  • 是的,先生 buildzone_admin 是 public_html 的子文件夹。 htaccess 文件位于 buildzone_admin 文件夹内,并且 index.php 文件也在那里。我已按照您的说明更改了 Rewritebase,并检查了简单的 $main->route('GET /test1', function() {echo "test with function working";})。但它不起作用,test1 也没有给出结果。同样的 404 错误。
  • :D 更改您的索引文件以运行 F3 Hello Word 项目:&lt;?php $main = require __DIR__ . '/lib/base.php'; $main-&gt;route('GET /hello-word', function() {echo "Hello World";}); $main-&gt;run(); 如果即使保留您的 .htaccess 文件或我的文件,您也看不到此功能,请尝试在本地设置您的项目并确保你的库很好。 test1我上面说的是一个非常开始的路线,它应该可以工作,即使其他人工作或不工作。
【解决方案2】:
  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]) {
});

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2017-02-19
    相关资源
    最近更新 更多