php实现url伪静态化
urlrewrite 系统切换^/api/(.*) www.test.com/api/$1 //从a系统跳到test系统
url的静态化,我一般借助于apache,nginx,htaccess等,很少用php来实现url的静态化,用php来实现静态化比较麻烦,所以就个人而言是不推荐使用php来实现url静态化
一,url的静态化实现的原理
1,通过程序来把动态的url转换成静态的url,转换方法最好是统一的接口。把静态的url放到html中,这样我们通过页面看到的就是静态的url。
2,apache或者其他,加载rewrite模块,添加重写规则。这样当我们点页面中的静态url时,就可以转向正确的url了。虽然执行的还是php文件,但是浏览器的地址栏中显示出来的,还是静态的url。
如果用php来实现url静态化,也要保持地址栏里面也要静态的url,这个比较麻烦的,下面就这个来举个简单的例子。
二,把动态url转换成静态url
//将url转换成静态url function url_rewrite($file, $params = array (), $html = "", $rewrite = true) { if ($rewrite) { //开发阶段是不要rewrite,所在开发的时候,把$rewrite = false $url = ($file == index) ? : / . $file; if (! empty ( $params ) is_array ( $params )) { $url .= / . implode ( /, array_slice($params, 0 , 2)); $param = array_slice($params, 2); foreach($param as $key = $value){ $url .= / . $key . / . urlencode ( $value ); } } if (! empty ( $html )) { $url .= . . $html; } } else { $url = ($file == index) ? / : / . $file; if (substr ( $url, - 4 ) != .php $file != index) { $url .= .php; } if (! empty ( $params ) is_array ( $params )) { $url .= ? . http_build_query ( $params ); } } return $url; echo url_rewrite ( test, array (class = "User", act = check, name = tank,page= 5 ) );echo " br/ "; //$rewrite = false的情况下,显示如下/test.php? test.php, array (class = "User", act = check, name = tank ) );echo " br/ "; //$rewrite = true的情况下,显示如下/test.php/User/check/tank echo url_rewrite ( test, array (class = "User", act = check, name = tank ) );echo " br/ "; //$rewrite = true的情况下,显示如下/test/User/check/tank echo url_rewrite ( test, array (class = "User", act = check, name = tank ), html );echo " br/ "; //$rewrite = true的情况下,显示如下/test/User/check/tank.html a href="./test3 ?php echo url_rewrite(test.php,array(class= "User",act= check,name= tank));? " test /a
到这儿如果直接点击的话,肯定会报404错误的,因为根不可能找到tank这个目录的。 难点也在这儿,所以我们要把找不到的目录和文件指定一个php文件。这个要利用到apache,nginx,或者htaccess等。
三,指定一个统一入口
RewriteCond %{REQUEST_FILENAME} !-f //找不到文件 RewriteCond %{REQUEST_FILENAME} !-d //打不到目录 RewriteRule . /test3/index.php [L]
不管你是以.htaccess的方式来实现,还是写在apache等的配置文件中,都是可以的。上面三句话是什么意思呢,如果找不到目录转到index.php文件,如果找不到文件,也转到index.php。
这样做了,当我们访问http://localhost/test3/test.php/User/check/tank时候,就会转到index.php 来,既然知道到那个php文件了,那就好办了。
以下内容都是以http://localhost/test3/test.php/User/check/tank这种重写的方式来操作的,其他方式也都差不多。
四,index.php文件,URL映射解析类http://hudeyong926.iteye.com/admin/blogs/1113971
$key = array_keys($array,$match[0]); //得到文件所对应的下标Array ( [0] = 2 ) $file_array = array_slice($array,0,$key[0]+1); //Array ( [0] = [1] = test3 [2] = test.php ) $param_array = array_slice($array,$key[0]+1); //Array ( [0] = User [1] = check [2] = tank ) $file_path = implode(/,$file_array); if($array[$key[0]] != "index.php"){ include_once($array[$key[0]]); //包函请求url中的php文件,在这里是test.php if(class_exists($param_array[0])){ //判断一下test.php这个文件中有没有User这个class $obj = new $param_array[0]; if(method_exists($obj,$param_array[1])){ //判断一下User这个class中有有没有check这个方法 $obj- $param_array[1]($param_array[3]); //调用这个方法,结果是(我的名子叫tank)
到这儿,当我们访问http://localhost/test3/test.php/User/check/tank这个网址的时候,
结果如下:我的名子叫tank,并且地址栏还仍然保持着静态。
到这儿通过php,我们完成了一个简单的url的重写过程。其实还是借助了.htaccess,或者apache等,但是重写的规则没有在.htaccess,或者apache中。如果完全用php来实现url的静态化,个人感觉,不可能。
php访问url的四种方式 1.fopen方式 2.file_get_contents方式(打开远程文件的时候会造成CPU飙升。file_get_contents其实也可以post) 3.curl方式4.fsockopen方式(只能获取网站主页信息,其他页面不可以)以上就是php访问url的四种方式的详细内容,更多请关注php...
相关文章
- PHP官方手册研读--php的垃圾回收机制
- PHP编程实现MySQL数据库连接(通过php连接mysql)
- 的应用利用PHP中MySQL函数实现功能强大的数据库操作(php中mysql函数)
- PHP中如何连接MySQL数据库?(php怎么连接mysql数据库)
- PHP扩展开发:实现Redis读写数据(php扩展redis)
- 快速拥抱Web开发:PHP与MySQL(php和mysqlweb开发)
- PHP编译MySQL:一步一步指南(php编译mysql)
- Linux平台如何测试PHP环境(linux测试php环境)
- PHP与MySQL的完美搭配,打造高效列表展示(php与mysql列表)
- PHP与MySQL结合使用实现关联查询的方法(php关联mysql查询)
- PHP开发者必须了解的Linux常识(php开发linux)
- PHP MySQL 开发构建实现功能多样的网站(php mysql 类)
- 技术使用PHP与MSSQL高效连接:实现无缝关联(php连接mssql的)
- PHP连接MSSQL实现数据交互(mssql类php)
- PHP连接MSSQL数据库快速开启(php mssql 打开)
- PHP与MySQL实现无缝连接(php mysql 连接)
- PHP实现华丽丽的图片上传 MySQL储存精妙记录(php上传图片mysql)
- PHP编程实现Redis集合操作(redis集合操作php)
- 不用mod_rewrite直接用php实现伪静态化页面代码
- PHP安全技术之实现php基本安全
- PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
- php在线解压ZIP文件的方法