精华内容
下载资源
问答
  • thinkphp路由
    2021-04-17 04:20:54

    在ThinkPHP中的路由主要的用途为:美化url路径,访问更安全;

    可以制定路由规则,检验url请求。

    一、路由配置

    在ThinkPHP5.0中路由是默认开启的。相关的配置信息为//true代表开启路由模式,false代表关闭路由模式"url_route_on" => true,

    //强制模式,true代表必须定义路由才能访问,false代表为非强制性"url_route_must" => false,

    二、路由基础定义

    路由文件默认引入think\Route模块。//get请求访问[http://www.xxx.com/index,](http://www.xxx.com/index,)除了get方法外,还有post,put,delete等方法 Route::get("/index", function(){    return "Hello World";

    });

    三、路由参数传递Route::get("/index/:id", function($id){    return $id;

    });

    四、控制器与路由//指index的get请求由application/index/controller/Index.php下的index方法处理

    Route::get("/index", "index/Index/index");

    作者:whiteMu

    链接:https://www.jianshu.com/p/1ae1435a7c8a

    更多相关内容
  • ThinkPHP路由详解

    2020-12-18 18:33:35
    浏览器输入localhost:8999就可以看到ThinkPHP的默认首页了:一个笑脸。 在这里,我们访问到的是ThinkPHP自带的默认入口文件index.php也就是访问到的是IndexController的index()方法,这是因为ThinkPHP默认设置: '...
  • ThinkPHP路由机制简介

    2021-04-28 05:16:15
    本文实例讲述了ThinkPHP路由机制。分享给大家供大家参考,具体如下:ThinkPHP 支持 URL 路由功能,要启用路由功能,需要设置ROUTER_ON参数为true。开启路由功能后,系统会自动进行路由检测,如果在路由定义里面找到...

    本文实例讲述了ThinkPHP路由机制。分享给大家供大家参考,具体如下:

    ThinkPHP 支持 URL 路由功能,要启用路由功能,需要设置ROUTER_ON参数为true。开启路由功能后,系统会自动进行路由检测,如果在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向。路由功能需要定义路由定义文件,位于项目的配置目录下面,文件名为 routes.php

    定义格式:

    Return Array(

    'RouteName'=>array('模块名称','操作名称','参数定义','额外参数'),

    //常规路由

    );

    例如,我们启用了路由功能,并且定义了下面的一个路由规则:

    'blog'=>array('Blog','index','year,month,day','userId=1&status=1')

    那么我们在执行

    复制代码 代码如下:

    的时候就会实际执行 Blog 模块的 index 操作,后面的参数/2007/9/15/ 就会依次按照 year/month/day 来解析,并且会隐含传入 userId=1 和 status=1 两个参数。

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    以上就介绍了ThinkPHP路由机制简介,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • php //thinkphp 路由定义规则 $route = array( ‘news/:action/:year\d/:month/:day’=>’news/read?year=:2&month=:3&day=:4’, ‘news/:action^delete|update|insert/:year\d/:month/:day’=>array( ‘news/...
  • thinkphp 路由定义

    2021-04-26 13:24:36
    启用路由要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),并且在应用(或者模块)配置文件中开启路由:// 开启路由'URL_ROUTER_ON'=>true,然后就是...

    启用路由

    要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),并且在应用(或者模块)配置文件中开启路由:

    // 开启路由

    'URL_ROUTER_ON'=>true,

    然后就是配置路由规则了,在模块的配置文件中使用URL_ROUTE_RULES参数进行配置,配置格式是一个数组,每个元素都代表一个路由规则,例如:'URL_ROUTE_RULES'=>array(

    'news/:year/:month/:day'=>array('News/archive','status=1'),

    'news/:id'=>'News/read',

    'news/read/:id'=>'/news/:1',

    ),

    系统会按定义的顺序依次匹配路由规则,一旦匹配到的话,就会定位到路由定义中的控制器和操作方法去执行(可以传入其他的参数),并且后面的规则不会继续匹配。

    路由定义

    路由规则的定义格式为: '路由表达式'=>'路由地址和传入参数'

    或者:array('路由表达式','路由地址','传入参数')

    路由表达式

    路由表达式包括规则路由和正则路由的定义表达式,只能使用字符串。正则表达式/^blog\/(\d+)$/

    规则表达式blog/:id

    路由地址

    路由地址(可以支持传入额外参数)表示前面的路由表达式需要路由到的地址(包括内部地址和外部地址),并且允许隐式传入URL里面没有的一些参数,这里允许使用字符串或者数组方式定义,特殊情况下还可以采用闭包函数定义路由功能,支持下面6种方式定义:方式1:路由到内部地址(字符串)'[控制器/操作]?额外参数1=值1&额外参数2=值2...'

    方式2:路由到内部地址(数组)参数采用字符串方式array('[控制器/操作]','额外参数1=值1&额外参数2=值2...')

    方式3:路由到内部地址(数组)参数采用数组方式array('[控制器/操作]',array('额外参数1'=>'值1','额外参数2'=>'值2'...)[,路由参数])

    方式4:路由到外部地址(字符串)301重定向'外部地址'

    方式5:路由到外部地址(数组)可以指定重定向代码array('外部地址','重定向代码'[,路由参数])

    方式6:闭包函数function($name){ echo 'Hello,'.$name;}

    3.2.3版本开始支持全局路由定义,如果你定义的是全局路由,那么路由地址的定义格式中需要增加模块名,例如:'blog/:id'=>'Home/blog/read'// 表示路由到Home模块的blog控制器的read操作方法

    如果路由地址以“/”或者“http”开头则会认为是一个重定向地址或者外部地址,例如:'blog/:id'=>'/blog/read/id/:1'

    和'blog/:id'=>'blog/read'

    虽然都是路由到同一个地址,但是前者采用的是301重定向的方式路由跳转,这种方式的好处是URL可以比较随意(包括可以在URL里面传入更多的非标准格式的参数),而后者只是支持模块和操作地址。

    举个例子,如果我们希望 avatar/123 重定向到 /member/avatar/id/123_small 的话,只能使用:'avatar/:id'=>'/member/avatar/id/:1_small'

    路由地址采用重定向地址的话,如果要引用动态变量,也是采用 :1、:2 的方式。

    采用重定向到外部地址通常对网站改版后的URL迁移过程非常有用,例如:'blog/:id'=>'http://blog.thinkphp.cn/read/:1'

    表示当前网站(可能是http://thinkphp.cn)的 blog/123 地址会直接重定向到 http://blog.thinkphp.cn/read/123。

    默认情况下,外部地址的重定向采用301重定向,如果希望采用其它的,可以使用:'blog/:id'=>array('http://blog.thinkphp.cn/read/:1',302);

    在路由跳转的时候支持额外传入参数对(额外参数指的是不在URL里面的参数,隐式传入需要的操作中,有时候能够起到一定的安全防护作用,后面我们会提到),支持 额外参数1=值1&额外参数2=值2 或者 array('额外参数1'=>'值1','额外参数2'=>'值2'...) 这样的写法,可以参考不同的定义方式选择。例如:'blog/:id'=>'blog/read?status=1&app_id=5',

    'blog/:id'=>array('blog/read?status=1&app_id=5'),

    'blog/:id'=>array('blog/read','status=1&app_id=5'),

    'blog/:id'=>array('blog/read',array('status'=>1,'app_id'=>5)),

    上面的路由规则定义中额外参数的传值方式都是等效的。status和app_id参数都是URL里面不存在的,属于隐式传值,当然并不一定需要用到,只是在需要的时候可以使用。

    路由参数

    当路由地址采用数组方式定义的时候,还可以传入额外的路由参数。

    限制URL后缀

    例如:'blog/:id'=>array('blog/read','status=1&app_id=5',array('ext'=>'html')),

    就可以限制html后缀访问该路由规则才能生效。

    限制请求类型

    例如:'blog/:id'=>array('blog/read','status=1&app_id=5',array('method'=>'get')),

    就限制了只有GET请求该路由规则才能生效。

    自定义检测

    支持自定义检测,例如: 例如:'blog/:id'=>array('blog/read','status=1&app_id=5',array('callback'=>'checkFun')),

    就可以自定义checkFun函数来检测是否生效,如果函数返回false则表示不生效。

    展开全文
  • http://my.oschina.net/u/1178986/blog/201206//thinkphp 路由定义规则$route = array('news/:action^delete|update|insert/:year\d/:month/:day'=>array('news/read?extra=:2&status=1','year=:2&month=...

    http://my.oschina.net/u/1178986/blog/201206

    //thinkphp 路由定义规则

    $route = array(

    'news/:action^delete|update|insert/:year\d/:month/:day'=>array('news/read?extra=:2&status=1','year=:2&month=:3&day=:4'),

    'news/:action/:year\d/:month/:day'=>'news/read?year=:2&month=:3&day=:4'

    );

    $url = 'http://www.test.com/index.php/news/read/2012/2/21/extraparam/test.html';

    //后缀名

    $extension = 'html';

    //根据pathinfo定义 详情看: http://my.oschina.net/u/1178986/blog/201206

    //可知: $_SERVER['PATH_INFO'] = 'news/read/2012/2/21/extraparam/test.html';

    $regx = 'news/read/2012/2/21/extraparam/test.html';

    //循环匹配路由规则

    foreach($route as $key=>$value){

    //如果匹配成功,则不继续匹配

    if(parseUrlRule($key,$value,$regx,$extension))

    break;

    }

    /**

    * @$rule string 路由规则

    * @$route string 规则映射的新地址

    * @$regx string 地址栏pathinfo字符串

    * @$extension stirng 伪静态拓展名

    * return bool

    */

    function parseUrlRule($rule,$route,$regx,$extension=null){

    //去掉后缀名

    !is_null($extension) && $regx = str_replace('.'.$extension,'',$regx);

    //把路由规则和地址,分割到数组中,然后逐项匹配

    $ruleArr = explode('/',$rule);

    $regxArr = explode('/',$regx);

    //$route以数组的格式传递,则取第一个

    $url = is_array($route) ? $route[0] : $route;

    $match =true;

    //匹配检测

    foreach($ruleArr as $key=>$value){

    if(strpos($value,':')===0){

    if(substr($value,-2)=='\\d' && !is_numeric($regxArr[$key])){

    $match = false;

    break;

    }elseif(strpos($value,'^')){

    $stripArr = explode('|',trim(strstr($value,'^'),'^'));

    if(in_array($regxArr[$key],$stripArr)){

    $match = false;

    break;

    }

    }

    //静态项不区分大小写

    }elseif(strcasecmp($value, $regxArr[$key])!==0){

    $match = false;

    break;

    }

    }

    //匹配成功

    if($match){

    //把动态变量写入到数组$matches 中,同时去除静态匹配项

    foreach($ruleArr as $key=>$value){

    if(strpos($value,':')===0){

    //获取动态变量,作为数组下标

    if(substr($value,-2,1)=='\\')

    $matchKey = substr($value,1,-2);

    elseif($pos=strpos($value,'^'))

    $matchKey =substr($value,1,$pos-1);

    else

    $matchKey = substr($value,1);

    $matches[$matchKey] = array_shift($regxArr);

    }else

    array_shift($regxArr); //去除静态匹配项

    }

    //获取数组中的值,目的是配合子模式进行替换

    $values = array_values($matches);

    //正则匹配替换,正则需要用'e'作为修饰符

    $url = preg_replace('/:(\d+)/e','$values[\\1-1]',$url);

    //解析url 格式: 分组/模块/操作?key1=value1&key2=value2

    if(strpos($url,'?')!==false){

    // 分组/模块/操作?key1=value1&key2=value2

    $arr = parse_url($url);

    $paths = explode('/',$arr['path']);

    parse_str($arr['query'],$queryArr);

    }elseif(strpos($url,'/')!==false) //分组/模块/操作)

    $paths = explode('/',$url);

    else // key1=value1&key2=value2

    parse_str($url,$queryArr);

    //获取 分组 模块 操作

    if(!empty($paths)){

    $var['actionName'] = array_pop($paths);

    $var['moduleName'] = array_pop($paths);

    if(!empty($paths)){

    $groupList = 'Home,Admin';

    $temp = array_pop($paths);

    if(in_array($temp,explode(',',$groupList)))

    $var['groupName'] = $temp;

    }

    }

    //合并的到GET数组中,方便全局调用

    $_GET = array_merge($_GET,$var);

    //合并参数

    if(isset($queryArr))

    $_GET = array_merge($_GET,$queryArr);

    //匹配url中剩余的参数

    preg_replace('/(\w+)\/([^,\/]+)/e','$tempArr[\'\\1\']=\'\\2\'',implode('/',$regxArr));

    if(!empty($tempArr))

    $_GET = array_merge($_GET,$tempArr);

    //route是数组的话

    if(is_array($route)){

    $route[1]=preg_replace('/:(\d+)/e','$values[\\1-1]',$route[1]);

    parse_str($route[1],$var);

    $_GET = array_merge($_GET,$var);

    strpos($url,'?')!==false ? $der ='&' : $der='?';

    //最终写入到$_GET中的参数,包括三个部分

    //1.地址栏剩余参数

    //2.路由地址中的参数

    //3.$route是数组时的第二个参数

    if(!empty($tempArr))

    $var = array_merge($tempArr,$var);

    $url .=$der.http_build_query($var);

    }

    $_GET['finalUrl'] = $url;

    //保证$_REQUEST 也能访问

    $_REQUEST = array_merge($_REQUEST,$_GET);

    //结果

    print_r($_GET);

    return true;

    }

    return $match;

    }

    //在部署时会把index.php隐藏,开启apache的重写模块

    //重写规则 : RewriteRule ^(.+)$ /index.php/$1

    //详细配置: http://lamp.linux.gov.cn/Apache/ApacheMenu/rewrite/

    //开启后,apache会自动把 http:/www.test.com/news/read/2012/2/21/extraparam/test.html转换为 http:/www.test.com/index.php/news/read/2012/2/21/extraparam/test.html

    2.[图片] 搜狗截图14年02月21日1621_2.png

    php-sourcecode-46304.html

    bd6ce9a3c2b09db16b8881ae4a72a9d3.png

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • 在 Nginx 对应的站点配置中添加下列配置,Laravel框架有此问题也是类似的解决方案 location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } }
  • //thinkphp路由定义规则$route=array('news/:action/:year\d/:month/:day'=>'news/read?year=:2&month=:3&day=:4','news/:action^delete|update|insert/:year\d/:month/:day'=>array('ne...
  • 路由是项目开发中比较重要的一个环节,每个项目都会使用路由进行管理接口,接下来本文会从源码方面带大家一起学习路由。 框架路由解析前言一、路由初识化简单分析二、路由定义 前言 使用框架写过项目的肯定都使用过...
  • location~\.php{#fastcgi_passremote_php_ip:9000;fastcgi_passunix:/dev/shm/php-cgi.sock;fastcgi_indexindex.php;set$real_script_name$fastcgi_script_name;if($fastcgi_script_name~"^(.+?\...
  • 主要介绍了thinkphp的URL路由规则与配置方法,实例分析了ThinkPHP路由规则及伪静态设置方法,并分析了相关的注意事项,是ThinkPHP开发中非常重要的技巧,需要的朋友可以参考下
  • ThinkPHP路由规则

    千次阅读 2018-04-02 16:47:38
    版本说明:VERSION = 5.1.7;方法定义路由规则定义2种访问方式对于Route::rule('new/:id','News/read');的2种请求方式
  • 39-thinkPhp路由的分组

    2020-07-28 17:50:50
    1.路由闭包方式分组 //路由分组 //闭包方式运用分组 Route::group('rg',function (){ Route::get(':id','read'); Route::get(':name','name'); }) ->prefix('routegroup/') //简化同一个控制器名 ->ext('...
  • thinkphp路由重写规则

    2020-10-26 10:33:13
    由于thinkphp默认路由方式是1,所以每次打开界面的时候都要需要填写入口文件,这样显得路由不好看又麻烦,所以下面方法可以去掉入口文件index.php。 例如: 原来:http://hys.com/index.php/home/Index/index 改完后...
  • thinkphp 路由

    2019-05-30 17:24:32
    路由定义文件 route 定义下的所有的路由文件都是有效的 定义路由必须使用 use think\facade\Route; 控制器定义 <?php namespace app\admin\controller; class Index { public function Index($number){ echo...
  • 编程语言ThinkPHP路由详解 ThinkPHP路由通俗的说,他是一个url的传输规则,例如:index.php?g=Homem=Indexa=price 这个规则也是可以变化的, 可以设置为@或者其他,规则主要有pathinfo等, 有了基本配置...
  • ThinkPHP路由/路由分组;创建多项目 一.Model 模型 请确保你已经在数据库配置文件中配置了数据库连接信息 模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写 ...
  • 问题:thinkphp本地开发,设置了路由,但是访问一直是404。 解决: Route::post('sxy/banner', 'api/sxy.Banner/getBanner'); 程序也做了跨域处理,但是测试请求一直是404。研究过程忽略,最后发现 浏览器页面...
  • ThinkPHP 路由功能

    千次阅读 2017-01-06 09:11:03
    路由功能,就是配置 URL,让 URL更加的简洁和优雅。路由模式只对 PATHINFO 模式和兼容模式...ThinkPHP 默认的就是 PATHINF 模式。  //启用路由功能 'URL_ROUTER_ON'=>true, //配置路由规则 'URL_RO
  • Thinkphp 路由设置和定义,要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),并且在应用(或者模块)配置文件中开启路由。 1,路由的设置  'URL_...
  • ThinkPHP支持URL路由功能,要启用路由功能,需要设置ROUTER_ON 参数为true。开启路由功能后,系统会自动进行路由检测,如果在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向。路由功能需要定义...
  • thinkphp路由规则

    2016-02-27 22:30:00
    Think PHP的路由规则暂只支持PATHINFO模式或者兼容模式,实现对模块的路由操作。 Think PHP包括四类路由:正则路由、规则路由、静态路由(URL映射)、闭包支持。...路由规则的定义格式为: '路由表达式'=>...
  • thinkphp 路由模式

    2021-04-21 12:26:47
    路由模式4种默认是第二种参数存放在配置文件ThinkPHP/Conf/convertion.php下面 模式代表值URL_MODEL = 0/1/2/3 分别代表四种url地址模式我们修改该只不建议 在上面修改应该在本地文件修改Conf\config.php添加下面...
  • ThinkPHP_路由

    2021-09-24 15:18:12
    ThinkPHP路由文档 //Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)'); //导入路由类 use think\Route; Route::any('login','admin/login/login',['ext'=>'php']); //get...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,546
精华内容 3,418
关键字:

thinkphp路由

友情链接: ContOUCode.zip