路由和伪静态是搭配使用的,目的是为了隐藏真是网址,优化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最新版,以免出现以下奇怪的问题!

文章不断更新中

最后修改:2018 年 03 月 24 日
如果觉得我的文章对你有用,请随意赞赏