URL映射 php 实现

IIS上的PHP路由配置与URL重写 本文探讨了在IIS服务器上配置PHP路由的解决方案。当PHP项目从内置服务器迁移到IIS时,常因URL路径处理差异导致路由失效。作者提出两个关键改进:一是修改路由函数,移除子目录路径;二是配置IIS的URL重写规则,通过web.config文件将所有请求重定向到index.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。

<?
/**
  *对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三种形式的处理
  *@param:null
  *@return: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,那应该要该的不多。)

<?
function 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;
}
?>
 
理解URL重写:使PHP应用URL更友好 本章深入探讨了如何通过URL重写技术改善PHP应用的URL结构。作者首先介绍了URL映射和文件之间的独立性,然后详细解释了URL重写的机制及其在现代PHP网站中的应用。接着,通过配置NGINX和Apache服务器的实例,展示了如何将请求重定向到index.php。最后,作者通过代码示例,说明了如何将传统的URL参数转换为更友好的路由格式,使得用户在访问网站时可以得到更为简洁和直观的URL。 阅读详情

相关推荐

php url路由入门实例

一、什么是php的路由机制 1、路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.test.com/article/1  其中:/article/1  -> ?_m=article&id=1。 2、然后将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。 二、PHP的URL路由方式 总体来说就是:获取路径信息->处理路径信息 URL路由方式: 第一种是通过url参数进行映射的方式,一般是两个参数,分别代表控制器类和方法比如index.php?c=index&m=index映射到的是index控制器的index方法

[Spring MVC学习02]URL地址映射

@RequestMapping中有一个value属性用来映射url,如果不写的话,默认就是value属性 @RequestMapping({" ", " "}) @RequestMapping如果用在类上面,就表示这个类里面的所有响应请求都是以该地址作为父路径 指定控制器的方法URI 5.2method属性 指定请求的method类型,可以接受GET,POST,PUT,DELETE等,默认是可以接收GET请求和POST请求 5.3params属性 params:指定request中必须包含某些参

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 1526

回答PHPCHINA上的几个问题:URL映射

PHPCHINA服务器搬迁后,我就基本上上不去了,只能用代理,郁闷。但用代理居然不能发帖,回帖。做为版主,深感遗憾,今天用代理上去看到了几个帖子,顺便在这里回答下。    1、大家来说说URL映射吧    一般url映射有两种方式,一种是通过mod_rewrite实现,这种网上教材很多我也不多说了。另外一种是在程序中模拟,比如类似zend Framework中的那种方式/index.php/controller/action/var1/value1/var2/value2/。这里方式其实最主要是通过一个统一的输入接口,然后对url进行解析,最后转发到相应的controller中的module。

URL地址映射配置

URL地址映射配置 @RequestMapping 通过注解 @RequestMapping 将请求地址与方法进行绑定,可以在类级别和方法级别声明。类级别的注解负责将一个特定的请求路径映射到一个控制器上,将 url 和类绑定;通过方法级别的注解可以细化映射,能够将一个特定的请求路径映射到某个具体的方法上,将 url 和类的方法绑定。 映射单个 URL @RequestMapping("") 或 @RequestMapping(value="") package com.xxxx.springmvc.co

理想主义的花终将盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 2037

【现代电路理论】【2】考尔法设计无源单口网络

夏 弥:其实你在冰面上看到鱼浮上来 明年冬天如果你还在那里,那鱼还是会上来换气 那时候你就可以带一把冰镐 把冰面砸开把鱼捞上来熬汤

痛苦的时候装出幸福相,这不是那么难做到的事 2886

Cadence Allegro16.6怎么导出器件引脚信息的报告

当我们需要用到器件的引脚相关信息时,可以利用allegro中的reports这个功能导出器件的相关信息。下面是具体的操作步骤。

suyucheng66的博客 5747

框架学习07 - SpringMVC 地址映射

通过⽅法级别的注解可以细化映射,能够将⼀个特定的请求路径映射到某个具体的⽅法上,将 url 和类的⽅法绑定。Set 和 List 类似,也需要绑定在对象上,⽽不能直接写在 Controller ⽅法的参数中。默认没有设置请求⽅式,在HTTP 请求中最常⽤的请求⽅法是 GET、POST,还有其他的⼀些⽅法, 如:DELET、PUT、HEAD 等。Map最为灵活,它也需要绑定在对象上,⽽不能直接写在Controller⽅法的参数中。客户端请求的参数到控制器功能处理⽅法上的参数的绑定,对于参数绑定⾮常灵活。

m0_68274160的博客 1252

避坑指南:Zabbix poller进程100%占用的5种常见原因及解决方案

本文深入剖析了Zabbix poller进程占用率高达100%的五大常见原因,包括监控项与进程数不匹配、不可达主机资源浪费、数据库性能瓶颈、监控项配置不合理以及版本缺陷。文章提供了从系统化诊断到针对性解决方案的完整指南,并重点介绍了如何通过优化zabbix_server.conf中的StartPollers等关键参数进行有效调优,帮助运维人员从根本上解决这一经典性能问题。

7z8x2c4v6b9的博客 250

php 路径映射,Servlet配置虚拟路径映射

在 web.xml 文件中,一个 元素用于映射一个 Servlet 的对外访问路径,该路径也称为虚拟路径。例如,在《第一个Servlet程序》教程中,TestServlet01 所映射的虚拟路径为“/TestServlet01”。创建好的 Servlet 只有映射成虚拟路径,客户端才能对其进行访问。但是在映射 Servlet 时,还有内容需要学习,如 Servlet 的多重映射、在映射路径中使用...

weixin_39774682的博客 258

双层优化入门(1)—基本原理与求解方法(附matlab代码)

双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。

配电网和matlab的博客 5万+

【存储原理】IO超时处理 块层block-scsi层之间

【存储原理】IO超时处理 块层block-scsi层之间

sinat_37817094的博客 1024

映射和请求参数乱码

一、映射 1、标准URL映射 2、Ant风格的URL映射* 3、占位符映射 @requestMapping (show/{userid}/{name} ) 方法中(@pathVariable( userid) String id) http://localhost/hello2/833/yanqi.do 4、限制请求方法映射 @requestMapping ( value=“ show2” , method=requestMehtod.POST) 5、限制参数映射 @requestMapping(

make_03的博客 261

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8375

php控制器实现自动映射,PHP实现路由映射到指定控制器

自定义路由的功能,指定到pathinfo的url上,再次升级之前的脚本SimpleLoader.phpclass SimpleLoader{public static function run($rules=array()){header("content-type:text/html;charset=utf-8");self::register();self::commandLine();sel...

weixin_39793420的博客 158

16、保障Azure应用安全:密钥管理与身份认证

本文深入探讨了保障Azure应用安全的关键措施,包括使用网络安全工具(如Application Gateway和Azure Front Door)防范攻击,解决传统密钥和机密存储方式的安全隐患,以及通过Azure Key Vault实现敏感信息的安全管理。同时,介绍了使用托管标识实现Azure资源间安全访问的方法,并结合实际操作步骤展示了如何配置Key Vault、设置访问策略、存储机密以及授予Web应用对SQL Server的访问权限。最后,对不同安全措施进行了比较,并提出了在开发、测试及生产环境中的综合

rock5的博客 72

继电保护原理1.2-反时限过流保护

反时限过流保护

让你爱上电路设计 1万+

短链接服务的接实现 基于nginx url php redis 、js二维码生成 、js二维码识别

很容易想明白短链接是怎么实现的,无非就是把很长的URL存到服务器上,和一个短的url做一个映射。要做一个短链接,有一个很短的域名当然是再好不过了,信浪微博的短域名t.cn就短到了极致,自己申请短域名的话,两三位的包含数字和’-‘的短域名还挺多,.io/.me/.cn都是比较短的结尾名如a-.me在我写这篇博客时还没被注册。 短域名服务器端需要做的是快速重定向,所以不涉及安全,也不需要用https协议

欧阳金城-武 2723

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

php url路由映射类,URL到类方法的映射例子

摘要:本章主要学习了MVC的架构原理,并通过配置简单的路由,实现类到路由方法的映射,代码如下:

weixin_39759270的博客 360

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PHP单文件入口URL路由原理

直接上代码:   <?php /******************************************************* * * URL 路由原理展示代码 * * 浏览器访问地址: http://server/index.php?C=Controler1&M=Method1 * 根据C找到控制器类,再根据M找到方法,然后执行这个方法 * *

smstong的成长轨迹 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PHP实现一个简单url路由功能

如果一个页面的内容呈现,需要根据url上传递的参数来进行渲染。很多时候可能是这样子写:xxx.com/xx?c=x&m=x&t=..,而我们看到的url往往是这样子的(以新浪微游戏的咖啡恋人为例) game.weibo.com/ilovecoffee….这种URL设计看上去比前一种更好一点:) 如果我们访问一下不存在的游戏应用,例如game.weibo.com/ilovecof...

weixin_34419321的博客 157

php 路由实现_PHP实现一个简单url路由功能实例

什么是php的路由机制1、路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.test.com/article/1 其中:/article/1 -> ?_m=article&id=1。2、然后将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。如果一个页面的内容呈现,需要根据url上传递的参数来进行渲染。很...

weixin_28929351的博客 1076

php url伪静态化解析

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

weixin_34344677的博客 255

百度mp3加密算法破解PHP版

<?php/** * @author qqzer.com * @copyright 2010 */function baidu_decode($url,$sertim=,$k=array()){$E=strlen($url);$C="";$I=array();$F=array();$J=$sertim % 26;$J=$J?$J:1;

Aendo的专栏 1134

PHP ZendFramework URL路由自定义

在index.php中添加下列代码 $router = new Zend_Controller_Router_Rewrite(); $frontController = Zend_Controller_Front::getInstance();// $front = Zen

teari.的专栏 2471
上一篇: ScribeFire 史上最好的文本编辑插件
下一篇: 网站推广的八种基本方法(常规网站推广方法)
smartview
博客等级 码龄21年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值