热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP路由模块怎么写(php路由的作用)

导读:很多朋友问到关于PHP路由模块怎么写的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览:

导读:很多朋友问到关于PHP路由模块怎么写的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

本文目录一览:


  • 1、ThinkPHP 后台Admin模块路由和URL重写问题


  • 2、thinkphp3.2路由写法


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


  • 4、php怎么学会一个框架的路由机制?


  • 5、thinkphp 配置路由


  • 6、thinkphp5 路由怎么写

ThinkPHP 后台Admin模块路由和URL重写问题

你即然已经用了 url_model = 2 配置模式, htaccess 文件就可以不用这样写了。把后面的 /$ 去掉,只留下 index.php 就可以了。

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

如何在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: ?

php怎么学会一个框架的路由机制?

如果用过zend和symphony或者yii的可以去研究一下源码。

主要是通过伪静态来实现单一入口,mvc框架都是这样。将所有请求通过apache伪静态解析转给某个指定文件,然后通过php的$_SERVER[]这个全局变量来去的请求的路径字符串,对其进行解析再分配给指定的类去处理,基本就是这样。

最简单的方法是建立一个.htaccess文件。文件内容贴给你

IfModule !mod_rewrite.c

ErrorDocument 500 'mod_rewrite must be enabled'

/IfModule

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php

将这个文件放在根目录下即可。文件作用很明显:将所有的请求路径转给index.php,然后在index.php里做请求字符串的判断即可打到路由解析功能。

thinkphp 配置路由

这种效果单凭用thinkphp的配置是实现不了的,要想实现首先应该考虑隐藏入口文件。

以下是几种环境下的配置:

apache:

1.httpd.conf配置文件中加载了mod_rewrite.so模块 //在APACHE里面去配置

#LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉

2.AllowOverride None 讲None改为 All //在APACHE里面去配置

Directory "D:/server/apache/cgi-bin"

AllowOverride none 改 AllowOverride ALL

Options None

Order allow,deny

Allow from all

/Directory

3.确保URL_MODEL设置为2,

在项目的配置文件里加入

return Array(

// .....

'URL_MODEL' = '2',

// .....

);

4 .htaccess文件必须放到跟目录下

这个文件里面加:

IfModule mod_rewrite.c

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

/IfModule

补充:在windows下不能建立以点开头的文件,你可以先随便建立一个文件

然后在DOS在操作 rename xxxx.xxxx .htaccess

IIS环境:

如果你的服务器环境支持ISAPI_Rewrite的话,可以配置httpd.ini文件,添加下面的内容:

RewriteRule (.*)$ /index\.php\?s=$1 [I]

在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:

rewrite

rules

rule name="OrgPage" stopProcessing="true"

match url="^(.*)$" /

conditions logicalGrouping="MatchAll"

add input="{HTTP_HOST}" pattern="^(.*)$" /

add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /

add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /

/conditions

action type="Rewrite" url="index.php/{R:1}" /

/rule

/rules

/rewrite

Nginx环境:

在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

location / { // …..省略部分代码

if (!-e $request_filename) {

rewrite ^(.*)$ /index.php?s=$1 last;

break;

}

}

其实内部是转发到了ThinkPHP提供的兼容模式的URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

如果你的ThinkPHP安装在二级目录,Nginx的伪静态方法设置如下,其中youdomain是所在的目录名称。

location /youdomain/ {

if (!-e $request_filename){

rewrite ^/youdomain/(.*)$ /youdomain/index.php?s=$1 last;

}

}

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路由模块怎么写的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 实现jqueryfileupload文件上传带进度条效果的方法
    jQueryFileUpload是一个Jquery图片上传组件,支持多文件上传、取消、删除,上传前缩略图预览、列表显示图片大小,支持上传进度条显示;支 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 参考了这篇文章:https:segmentfault.comq1010000000473230后报错误:GettingError“Formsubmissioncanceledbec ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
author-avatar
静待花开0088
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有