首页 后端开发 php教程 php url伪静态弥合析

php url伪静态弥合析

Jun 13, 2016 am 10:54 AM
action controller path router strpos

php url伪静态化解析

1、大家来说说URL映射吧
? ?一般url映射有两种方式,一种是通过mod_rewrite实现,这种网上教材很多我也不多说了。另外一种是在程序中模拟,比如类似zend Framework中的那种方式/index.php/controller/action/var1/value1/var2/value2/。这里方 式其实最主要是通过一个统一的输入接口,然后对url进行解析,最后转发到相应的controller中的module。

? ? 我这里写了两个简单函数来模拟。
? ? 第一个函数主要是进行地址解析,把类似/index.php/controller/action/var1/value1/var2/value2/的地址解析出来,一般来说要解析成三部分:controller,module,params。

<?php /** *对url路由进行简单的解析,支持对/path/to/site/index.php/module/action/parm/value * /path/to/site/index.php?/module/action/parm/value和 * /path/to/site/?/module/action/parm/value三种形式的处理 [email&#160;protected]:null [email&#160;protected]:router array */function url_router() {	$path = strip_tags ( $_SERVER ['REQUEST_URI'] );	$strpos = strpos ( $path, '.php' );	if ($strpos) {		$path = substr ( $path, $strpos + 4 );	} else {		if (empty ( $_SERVER ['QUERY_STRING'] )) {			$strpos = strpos ( $path, '?' );			if ($strpos) {				$path = substr ( $path, $strpos + 1 );			} else {				$path = '';			}		} else {			$path = $_SERVER ['QUERY_STRING'];		}	}	//统一化$path的格式,如果$path的第一个字符为/则去掉	if ($path [0] == '/') {		$path = substr ( $path, 1 );	}	//解析,并且路由	if (! empty ( $path )) {		$path = explode ( '/', $path );		$router ['controller'] = $path [0];		$router ['action'] = (! empty ( $path [1] )) ? $path [1] : 'index';		//print_r($path);		for($i = 2; $i < sizeof ( $path ); $i = $i + 2) {			$params [$path [$i]] = (isset ( $path [$i + 1] )) ? $path [$i + 1] : '';		}		$router ['params'] = $params;	} else {		//默认路由信息		$router ['controller'] = 'index';		$router ['action'] = 'index';		$router ['params'] = array ();	}	return $router;}?> 
登录后复制

这里就完成主要的url解析功能,然后是转发映射,下面这个函数实现(注意这个函数的实现是结合了我自己的架构,所以你采用的话需要相应的修改,当然你的MVC如果类似zend Framework,那应该要该的不多。)

<?phpfunction url_dispatch($router, $app_path = '/app/controllers/') {	require_once (SERVER_PATH . '/libs/controller.class.php');	$controller = $router ['controller'] . 'Controller';	//echo SERVER_PATH.$app_path.$controller.'.class.php';	if (! file_exists ( SERVER_PATH . $app_path . $controller . '.class.php' ))		die ( '缺少必要的类!' );	require_once (SERVER_PATH . $app_path . $controller . '.class.php');	$controller = new $controller ();	$controller->_setParam ( $router ['params'] );	$controller->{$router ['action'] . 'Action'} ();	return true;}?> 
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SpringBoot扫描不到Controller怎么解决 SpringBoot扫描不到Controller怎么解决 May 14, 2023 am 08:10 AM

SpringBoot小白创建项目,扫描不到Controller一系列问题1.2.3.4.5.6.还有一种办法是在启动服务类的入门,添加@ComponentScan(basePackages={“xxx.xxx.xx”,“xxx.xxx.xx”})里面的是包的全限定名,可以为多个SpringBoot自定义controller无法扫描到SpringBoot自定义controller路由找不到,原因是启动类和自定义的Controller包不在同一级目录下。官方建议application.java放的位

设置Linux系统的PATH环境变量步骤 设置Linux系统的PATH环境变量步骤 Feb 18, 2024 pm 05:40 PM

Linux系统如何设置PATH环境变量在Linux系统中,PATH环境变量用于指定系统在命令行中搜索可执行文件的路径。正确设置PATH环境变量可以方便我们在任何位置执行系统命令和自定义命令。本文将介绍如何在Linux系统中设置PATH环境变量,并提供详细的代码示例。查看当前的PATH环境变量在终端中执行以下命令,可以查看当前的PATH环境变量:echo$P

React Router使用指南:如何实现前端路由控制 React Router使用指南:如何实现前端路由控制 Sep 29, 2023 pm 05:45 PM

ReactRouter使用指南:如何实现前端路由控制随着单页应用的流行,前端路由成为了一个不可忽视的重要部分。ReactRouter作为React生态系统中最受欢迎的路由库,提供了丰富的功能和易用的API,使得前端路由的实现变得非常简单和灵活。本文将介绍ReactRouter的使用方法,并提供一些具体的代码示例。安装ReactRouter首先,我们需

DJI Osmo Action 5 Pro:发布日期已定,零售商透露发布价格可能会低于 GoPro Hero 13 Black DJI Osmo Action 5 Pro:发布日期已定,零售商透露发布价格可能会低于 GoPro Hero 13 Black Sep 04, 2024 am 06:51 AM

大疆尚未确认推出新运动相机的计划。相反,GoPro 今年似乎会领先于竞争对手,并透露将于 9 月 4 日推出两款新的运动相机。

SpringBoot多controller如何添加URL前缀 SpringBoot多controller如何添加URL前缀 May 12, 2023 pm 06:37 PM

前言在某些情况下,服务的controller中前缀是一致的,例如所有URL的前缀都为/context-path/api/v1,需要为某些URL添加统一的前缀。能想到的处理办法为修改服务的context-path,在context-path中添加api/v1,这样修改全局的前缀能够解决上面的问题,但存在弊端,如果URL存在多个前缀,例如有些URL需要前缀为api/v2,就无法区分了,如果服务中的一些静态资源不想添加api/v1,也无法区分。下面通过自定义注解的方式实现某些URL前缀的统一添加。一、

如何设置path环境变量 如何设置path环境变量 Sep 04, 2023 am 11:53 AM

设置path环境变量的方法:1、Windows系统,打开“系统属性”,点击“属性”选项,点击“高级系统设置”,在“系统属性”窗口中,选择“高级”标签,然后点击“环境变量”按钮,找到并点击“Path”编辑保存后即可;2、Linux系统,打开终端,打开你的bash配置文件,在文件末尾添加“export PATH=$PATH:文件路径”保存即可;3、MacOS系统,操作同上。

Linux中PATH环境变量的作用和重要性 Linux中PATH环境变量的作用和重要性 Feb 21, 2024 pm 02:09 PM

《Linux中PATH环境变量的作用和重要性》PATH环境变量是Linux系统中非常重要的环境变量之一,它定义了系统在哪些目录中寻找可执行程序。在Linux系统中,当用户在终端输入一个命令时,系统会在PATH环境变量所列出的目录中逐个查找是否存在该命令的可执行文件,如果找到则执行,否则会提示“commandnotfound”。PATH环境变量的作用:简化

如何正确设置Linux中的PATH环境变量 如何正确设置Linux中的PATH环境变量 Feb 22, 2024 pm 08:57 PM

如何正确设置Linux中的PATH环境变量在Linux操作系统中,环境变量是用来存储系统级别的配置信息的重要机制之一。其中,PATH环境变量被用来指定系统在哪些目录中查找可执行文件。正确设置PATH环境变量是确保系统正常运行的关键一步。本文将介绍如何正确设置Linux中的PATH环境变量,并提供具体的代码示例。1.查看当前PATH环境变量在终端中输入以下命

See all articles