php金沙官网线上 url路由入门实例_php实例_脚本之

一、什么是php的路由机制

前段时间写了个关于手机应用的api,一直是用的query_string这种地址,而且还是根据一个act参数来区分所有的动作,这种让开发人员看起来比较费眼。本来想改写为“?c=controller&m=method&type=3&id=1” 这种形式,利用m参数来载入文件并进行实例化,后来看了sina weibo api 是对地址进行了路由。也决定跟风对地址路由。本来CI框架自己自带路由效果,但是因为考虑是写api,想写的比较纯粹一点。支持默认控制器:复制代码 代码如下:index.phpindex.php/controllerindex.php/controller/methodindex.php/controller/method/prarme1/value1index.php/controller/method/param1/value1/param2/value2.....

1、路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.test.com/article/1 其中:/article/1 -> ?_m=article&id=1。

具体类如下:复制代码 代码如下:';//这里需要对$SE_STRING进行过滤处理。$ary_url=array( 'controller'=>'index', 'method'=>'index', 'pramers'=>array;//var_dump;$ary_se=explode;$se_count=count;

2、然后将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。

//路由控制if($se_count==1 and $ary_se[0]!='' ){ $ary_url['controller']=$ary_se[0];

二、PHP的URL路由方式

}else if{//计算后面的参数,key-value $ary_url['controller']=$ary_se[0]; $ary_url['method']=$ary_se[1]; if($se_count>2 and $se_count%2!=0){ //没有形成key-value形式 die; }else{ for($i=2;$i < $se_count;$i=$i+2){ $ary_kv_hash=array(strtolower=>$ary_se[$i+1]); $ary_url[pramers]金沙官网线上,=array_merge($ary_url[pramers],$ary_kv_hash); } }}

总体来说就是:获取路径信息->处理路径信息

$module_name=$ary_url['controller'];$module_file=MODULE_DIR.$module_name.'.class.php';//echo $module_file;$method_name=$ary_url['method'];if(file_exists{ include; $obj_module=new $module_name(); //实例化模块m

URL路由方式:

if(!method_exists($obj_module, $method_name)){ die; }else{ if(is_callable(array($obj_module, $method_name))){ //该方法是否能被调用 //var_dump; $get_return=$obj_module->$method_name; //执行a方法,并把key-value参数的数组传过去 if){ //返回值不为空 var_dump; } }else{ die; } }}else{ die;}?>

第一种是通过url参数进行映射的方式,一般是两个参数,分别代表控制器类和方法比如index.php?c=index&m=index映射到的是index控制器的index方法。

第二种,是通过url-rewrite的方式,这样的好处是可以实现对非php结尾的其他后缀进行映射,当然通过rewrite也可以实现第一种方式,不过纯使用rewrite的也比较常见,一般需要配置apache或者nginx的rewrite规则 复制代码 代码如下: RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 第三种,就是通过pathinfo的方式,所谓的pathinfo,就是形如这样的url。xxx.com/index.php/c/index/aa/cc,apache在处理这个url的时候会把index.php后面的部分输入到环境变量$_SERVER['PATH_INFO'],它等于/c/index/aa/cc。然后我们的路由器再通过解析这个串进行分析就可以了,后面的部分放入到参数什么地方的,就依据各个框架不同而不同了。

三、 一个简单的PHP路由实现3.1 修改htaccess文件编写服务器apache或IIS自带的rewrite文件,将URL结构导入指定文件比如:index.php。

开启rewrite:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。启用.htaccess,需要修改apache/conf/httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。 复制代码 代码如下: Options FollowSymLinks AllowOverride None 改为复制代码 代码如下: Options FollowSymLinks AllowOverride All 然后我写了这样的rewrite:复制代码 代码如下:RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭 #RewriteCond $1 !^(index.php.php|images|robots.txt) RewriteRule -.html$ sharexie/test.php?action=$1&id=$2 #-.html$是规则,sharexie/test.php?action=$1&id=$2是要替换的格式,$1代表第一个括号匹配的值,$2代表第二个。 上面的代码就是将URL结构导入sharexie/test.php中。把这些保存为.htaccess文件放在网站的根目录就行了。

test.php复制代码 代码如下:

127.0.0.1/view-12.html

本文由金沙官网线上发布于编程,转载请注明出处:php金沙官网线上 url路由入门实例_php实例_脚本之

您可能还会对下面的文章感兴趣: