php路由的作用

阅读:0 来源: 发表时间:2023-04-10 06:49作者:林芳江

今天给各位分享php路由表达式的知识,其中也会对php路由的作用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、如何使用thinkphp路由正则表达式优化地址链接

2、thinkphp中路由表达式问题中""和":"是什么理解?

3、如何在PHP中实现URL路由

4、ThinkPHP5静态地址路由和动态路由的区别?

5、thinkphp3.2路由写法

6、thinkphp5 路由怎么写

如何使用thinkphp路由正则表达式优化地址链接

用thinkphp开发项目,其中搜索模块需要携带很多的参数,就会出现地址栏的链接很长,这样不仅看上去不美观,对于搜索引擎来说也是不友好的链接。于是,就需要将其修改成简短干练的地址链接。

thinkphp中是支持路由重写的,需要自己编写重写规则。在编写的过程中,遇到一个问题。可以说是一个老大难的问题,那就是中文,搜索关键字需要匹配中文。

在尝试各种正则匹配规则都失败的情况下,我这里只能写成?keyword=关键字的格式。

下面我们看,具体的实例:

未优化地址:

/model/search.php?317order=1isyear=0recommend=0bid=301sid=327keyword=关键字page=1

优化地址:

/model/search-316-0-0-0-301-327-1.html?keyword=关键字

路由正则:

'/^model\/search\-(\d*)\-(\d*)\-(\d*)\-(\d*)\-(\d*)\-(\d*)\-(\d*)$/'='Home/Search/model?:1order=:2isyear=:3recommend=:4bid=:5sid=:6page=:7',

理想的优化:

/model/search-316-0-0-0-301-327-关键字-1.html

理想的优化地址链接未能实现,因为汉字在使用正则时,总是匹配错误,于是,我这里只能写成?keyword=关键字的格式。

php路由的作用

thinkphp中路由表达式问题中""和":"是什么理解?

包裹在TP里面是组合变量

组合变量的优势是路由规则中没有固定的分隔符,可以随意组合需要的变量规则和分割符,例如路由规则改成如下一样可以支持:

Route::get('itemnameid', 'product/detail')-pattern(['name' = '[a-zA-Z]+', 'id' = '\d+']);

Route::get('item@name-id', 'product/detail')-pattern(['name' = '\w+', 'id' = '\d+']);

如何在PHP中实现URL路由

第一步,首先要在服务器的配置上对/router/路径进行拦截

调用某个文件夹目录下的index.php页面,假定现在所有模块使用单独的文件存放于class目录下,该目录与router平级,如下图所示:

第二步,路由分发器的实现(index.php)

1: !Doctype html

2: html

3: head

4: title路由测试~~/title

5: meta http-equiv="content-type" content="text/html; charset=utf-8" /

6: /head

7: body

8:

9: ?php

10:

11: date_default_timezone_set("Asia/Shanghai");

12:

13: define("MODULE_DIR", "../class/");

14:

15:

16: $_DocumentPath = $_SERVER['DOCUMENT_ROOT'];

17: $_FilePath = __FILE__;

18: $_RequestUri = $_SERVER['REQUEST_URI'];

19:

20: $_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==\router\index.php

21: $_UrlPath = $_RequestUri; //==/router/hello/router/a/b/c/d/abc/index.html?id=3url=http:

22:

23: $_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath);

24:

25: /**

26: * ;url=http:

27: *

28: * /hello/router/a/b/c/d/abc/index.html?id=3url=http:

29: */

30:

31: for ($i = 0; $i count($_AppPathArr); $i++) {

32: $p = $_AppPathArr[$i];

33: if ($p) {

34: $_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1);

35: }

36: }

37:

38: $_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1);

39:

40: $_AppPathArr = explode("/", $_UrlPath);

41: $_AppPathArr_Count = count($_AppPathArr);

42:

43: $arr_url = array(

44: 'controller' = 'index',

45: 'method' = 'index',

46: 'parms' = array()

47: );

48:

49: $arr_url['controller'] = $_AppPathArr[0];

50: $arr_url['method'] = $_AppPathArr[1];

51:

52: if ($_AppPathArr_Count 2 and $_AppPathArr_Count % 2 != 0) {

53: die('参数错误');

54: } else {

55: for ($i = 2; $i $_AppPathArr_Count; $i += 2) {

56: $arr_temp_hash = array(strtolower($_AppPathArr[$i])=$_AppPathArr[$i + 1]);

57: $arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash);

58: }

59: }

60:

61: $module_name = $arr_url['controller'];

62: $module_file = MODULE_DIR.$module_name.'.class.php';

63: $method_name = $arr_url['method'];

64:

65: if (file_exists($module_file)) {

66: include $module_file;

67:

68: $obj_module = new $module_name();

69:

70: if (!method_exists($obj_module, $method_name)) {

71: die("要调用的方法不存在");

72: } else {

73: if (is_callable(array($obj_module, $method_name))) {

74: $obj_module - $method_name($module_name, $arr_url['parms']);

75:

76: $obj_module - printResult();

77: }

78: }

79:

80: } else {

81: die("定义的模块不存在");

82: }

83:

84:

85: ?

86:

87: /body

88: /html

获取请求的uri,然后拿到要加载的模块名、调用方法名,对uri参数进行简单的判断..

第三步,模块的编写

根据上述的uri,我们要调用的是Hello模块下的router方法,那么可以在class目录下定义一个名为Hello.class.php的文件(注意linux下是区分大小写的)

1: ?php

2:

3: class Hello {

4:

5: private $_name;

6: private $_varValue;

7:

8: function __construct() {

9:

10: }

11:

12: function router() {

13: $this-_name = func_get_arg(0);

14: $this-_varValue = func_get_arg(1);

15: }

16:

17: function printResult() {

18: echo $this-_name;

19: echo "p";

20: echo var_dump($this-_varValue);

21: echo "/p";

22: }

23: }

24:

25: ?

ThinkPHP5静态地址路由和动态路由的区别?

静态路由:指的是路由是固定的,是在配置文件里面固定好的。

动态路由:路由带有参数或者使用正则表达式进行匹配。

两者都是在配置文件中进行设置,最大的区别就是静态路由是固定的,一条路由规则匹配一条url,而动态路由就是一条路由匹配多多条url,简单来说。静态路由是一对一,动态路由是一对多。

thinkphp3.2路由写法

最近也给自己博客(uzuzuz.com)弄了个简单的路由,我是这么写的给你个参考,记得HTML_CACHE_RULES也要对应上

    'URL_ROUTER_ON' = true,

    'URL_ROUTE_RULES' = array(

        'article/:id' = 'home/index/index_d',

        'article' = 'home/index/index',

    ),

    'HTML_CACHE_ON' = true, // 开启静态缓存

    'HTML_CACHE_TIME' = 3600, // 全局静态缓存有效期(秒)

    'HTML_FILE_SUFFIX' = '.html', // 设置静态缓存文件后缀

    'HTML_CACHE_RULES' = array(// 定义静态缓存规则

       'article:' = array('home/index/index_d'),    

    )

原来home/index/index_d/id/1.html 路由后生成的是article/1.html

thinkphp5 路由怎么写

点击4个不同的路由地址,可以查看当前的路由情况。

路由到read操作

路由到archive操作

项目配置文件中的路由定义如下:

//启用路由功能

'URL_ROUTER_ON'=true,

//路由定义

'URL_ROUTE_RULES'= array(

'blog/:year\d/:month\d'='Blog/archive', //规则路由

'blog/:id\d'='Blog/read', //规则路由

'blog/:cate'='Blog/category', //规则路由

'/(\d+)/' = 'Blog/view?id=:1',//正则路由

),

在模板文件中,我们使用了U函数动态生成路由地址:

路由1:blog/curd

路由2:blog/5

路由3:blog/2012/09

路由4:100这样试试呢希望能帮到你,我去后盾网忙活我的了,加油(=^▽^=)

关于php路由表达式和php路由的作用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

    声明

    删帖请联系zhiyihome@qq.com;