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都是相同的。它不工作。
请让我知道我错过了什么。
答案 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
格式,a1
,a2
发布字段,然后向domain.com/buildzone_admin/test3
发送请求
要测试其他方法(例如&#34; PATCH&#34;),请确保阅读F3文档。您可以尝试使用{Base :: instance-&gt; get(&#39; BODY&#39;)和Content-Type: application/json
标头,
等
希望这有帮助!
答案 1 :(得分:0)
您只定义了一个 (GET) 路由,因此如果您尝试加载任何其他路由,您将收到 404。它完全按照您定义的方式工作。
我建议您使用 lambda 函数来定义您的路由,如下所示:
$main->route('GET /[route]/@arg', function($main,$params) use (&$[classname]) {
$arg = $params['arg'];
// do something
echo \Template::instance()->render("template_file");
});
$main->set();
$main = \Base::instance();
$main->route('GET /show/@arg', function($main,$params) use (&$[classname]) {
});
$main->route('GET /list/@arg', function($main,$params) use (&$[classname]) {
});