路由和伪静态是搭配使用的,目的是为了隐藏真是网址,优化SEO,是网址看起来更友好
伪静态文件
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
路由
路由文件存放在route文件夹下,可以使用多个文件
<?php
use app\common\model\Nav;
$php=app('request')->server()['SCRIPT_NAME'];
if($php=='/index.php') {
route('admin', 'tpl/miss');
route('we/:media_id', 'index/wechat/tplmessage');
$nav = getNav();
foreach ($nav as $v) {
$v['url'] = substr(explode('.', $v['url'])[0], 1);
switch ($v['tpl']) {
case 0://默认页面
route($v['url'], 'index/' . $v['tpl_name']);
break;
case 1://列表页
route($v['url'], 'index/' . 'tpl/list?tpl=' . $v['tpl_name']);
break;
case 2://详情页
route($v['url'], 'index/' . $v['tpl_name']);
break;
case 3://单页
route($v['url'], 'index/' . 'tpl/page')->model([function () use ($v) {
return (new Nav)->where(['id' => $v['id']])->find();
}]);
break;
}
}
//Route::miss('tpl/miss');
}
要点
if($php=='/index.php') {
后台我们使用一个新的php文件,防止别人可以猜测到后台地址。加上这句if使路由只作用在前台。
route('admin', 'tpl/miss');
这个路由阻止了用户直接访问admin模块,如果访问admin模块直接跳转到404页面
$nav = getNav();
foreach ($nav as $v) {
$v['url'] = substr(explode('.', $v['url'])[0], 1);
switch ($v['tpl']) {
case 0://默认页面
route($v['url'], 'index/' . $v['tpl_name']);
break;
case 1://列表页
route($v['url'], 'index/' . 'tpl/list?tpl=' . $v['tpl_name']);
break;
case 2://详情页
route($v['url'], 'index/' . $v['tpl_name']);
break;
case 3://单页
route($v['url'], 'index/' . 'tpl/page')->model([function () use ($v) {
return (new Nav)->where(['id' => $v['id']])->find();
}]);
break;
}
}
这里就是前台自定义导航的路由,包含默认页、列表页、详情页、单页。
route($string, $string)->model([function(){}]);
ThinkPHP 版本5.1.5以下,闭包路由model参数需要是数组才可以正常使用,强烈建议一直使用5.1最新版,以免出现以下奇怪的问题!