php URL rewrite路径重写一例
一、文件 test.php
复制代码 代码示例:
<?php
$id=$_GET["id"];
echo $id;
?>
首先 apache文件里
打开Apache配置文件httpd.conf,找到如下:#LoadModule rewrite_module modules/mod_rewrite.so
开启rewrite,去点前面"#"
二、重载Allowoverride
查找apache配置文件找到如下:
复制代码 代码示例:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
将AllowOverride None 改为 AllowOverride All
在htaccess中暂时了解到三种url重定义
复制代码 代码示例:
<IFMODULE mod_rewrite.c>
RewriteEngine On
#RewriteBase / (若文件在根目录下不必定义)
#RewriteRule ^t_(.*).html$ test.php?id=$1 [NC](打开test.php以t_id.html 比如 t_2.html 页面输出 id=2)
RewriteRule ^([0-9]+)$ test.php?id=$1 [NC](直接输入id 比如 localhost/test/2 页面输出 id=2)
RewriteRule ^index.html$ index.php [NC](直接输入index.html可打开index.php这个页面)
</IFMODULE>
php 伪静态(url重写)的写法
PHP 伪静态,也称作php URL重写,无论是出于seo优化的考虑,还是想让url更美观,都是现在非常流行的方法,建议大家学习参考下。
来看下面这个网页 url:
http://www.jbxue.com/test.php/1,100,8630.html
其实处理的脚本是test.php 参数为1,100,8630
相当于test.php?a=1&b=1=100&c=8630 只不过这样的URL太难记。搜索引擎也不喜欢。
真静态只是完全生成了HTML。
客户端访问的时候直接输出。不用脚本解释。可以节省不少带宽哦。
当网站浏览不是很大时,可以考虑url重写,即不生成真正的静态页面。
为大家提供一个简单的url重写的php代码,方便初学的朋友参考。
有兴趣的朋友,还可以研究下这篇文章:php实现简单的伪静态URL的机制介绍 。
<?php
// url http://www.jbxue.com/test.php/1,100,8630.html
//利用server变量 取得PATH_INFO信息 该例中为 /1,100,8630.html 也就是执行脚本名后面的部分
if(@$path_info =$_SERVER["PATH_INFO"]){
//正则匹配一下参数
if(preg_match("/\/(\d+),(\d+),(\d+)\.html/si",$path_info,$arr_path)){
$gid =intval($arr_path[1]); //取得值 1
$sid =intval($arr_path[2]); //取得值100
$softid =intval($arr_path[3]); //取得值8630
}else die("Path:Error!");
//相当于test.php?gid=1&sid=100&softid=8630
}else die('Path:Nothing!');
?>
php实现简单的伪静态URL的机制介绍
php框架路由伪静态曾几何时,我们公司准备开发一套新的建站系统,决定将以前的框架给KO掉,重新开发一套新的框架来适应新的系统功能。领导们不希望使用外面已有的框架,号称要开发有自己特色的框架(不懂开发的领导害死人)。于是我们又投入到了新的开发当中。
由于我们的系统支持伪静态,以前的系统是直接使用服务器apache或IIS自带的rewrite文件定义规则,而框架中没有任何路由机制,于是这次框架准备使用新的策略,由PHP实现路由机制。于是我开始了功能实现的探索之路。
开发之前,我先了解‘路由机制’要做什么,它主要做两件事。
1.路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.wopop.com/article/1 其中:/article/1 -> ?_m=article&id=1。
2.其次,是将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。由于路由机制隔离了URL结构和参数的转换关系,使的日后结构的变化不会影响下面代码的执行。
通过上面的了解,可以得出要编写一个路由机制要一下几步:
1.编写服务器apache或IIS自带的rewrite文件,将URL结构导入index.php。
2.一个路由规则配置文件。
3.一个路由解析器,用来解析规则,匹配和转换URL。
于是,我们一一实现其中的每一个部分。
1.rewrite文件编写,以Apache为例:
复制代码 代码如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) index.php/$1 [L]
</IfModule>
上面的代码就是将URL结构导入index.php中,具体的rewrite细节就不赘述了。
2.在PHP中设置一个路由规则配置文件routes.php,我简单的使用了一个hash数组编写规则:
复制代码 代码如下:
/**
*路由配置文件编写说明:
* 路由配置在一个array数组中,一条记录代表一个规则
* 其中数组key的数据代表匹配的路径格式:使用特定的字符串标识 如&#x