三种实现PHP伪静态页面的方法(转)
PHP伪静态写法--其一
伪静态又名:URL重写
以下列举了三种方法。
方法一:
比如这个网页
http://www.2cto.com /soft.php/1,100,8630.html
其实处理的脚本是soft.php 参数为1,100,8630
相当于soft.php?a=1&b=1=100&c=8630 只不过这样的URL太难记。搜索引擎也不喜欢。
真静态只是完全生成了HTML。
客户端访问的时候直接输出。不用脚本解释。在流量非常大的时候(比如每天有上百万的访问量的时候)会起到很好的效果。也就是说服务器端实实在在的存在这个HTML页面。
当然在你网站的流量没有那么大的时候。URL重写是最好的方法(个人观点,大流量的时候可以考虑负载均衡了。同样没有关系)
附URL重写的方法有很多种,APACHE,IISREWRITE。甚至PHP脚本都可以直接处理。比如上例中就是PHP脚本直接处理(该方法好处是大流量的时候直接减轻WEB伺服器的压力。PS:同样也是个人观点:
================================================
程序为例:
http://www.2cto.com /soft.php/1,100,8630.html
CODE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //利用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!" ); //相当于soft.php?gid=1&sid=100&softid=8630 |
方法二:
一 打开 Apache 的配置文件 httpd.conf 。
二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉
三 在 httpd.conf中添加:
1 2 3 4 5 | < IfModule mod_rewrite.c> RewriteEngine On #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+.html RewriteRule ^(.*?(?:index|dispbbs))-([-0-9]+).html 1.php?__is_apache_rewrite=1&__rewrite_arg=2 </ IfModule > |
四 要实现asp帖子URL到php帖子的映射,在 第三步的<IfModule mod_rewrite.c>和</IfModule>之间添加:
1 2 3 | RewriteMap tolowercase int:tolower RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)=d+ [NC] RewriteRule ^(.*(?:index|dispbbs)).asp 1.php?{tolowercase:%{QUERY_STRING}}&__is_apache_rewrite=1 |
五 保存httpd.conf并重启Apache
方法三:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <?php /* 功能:PHP伪静态化页面的实现 具体用法: 例如链接为:test.php/year/2006/action/_add.html mod_rewrite(); $yearn=$_GET["year"];//结果为'2006' $action=$_GET["action"];//结果为'_add' */ function mod_rewrite(){ global $_GET ; $nav = $_SERVER [ "REQUEST_URI" ]; $script_name = $_SERVER [ "SCRIPT_NAME" ]; $nav = substr ( ereg_replace ( "^$script_name" , "" ,urldecode( $nav )),1); $nav =preg_replace( "/^.ht(m){1}(l){0,1}$/" , "" , $nav ); //这句是去掉尾部的.html或.htm $vars = explode ( "/" , $nav ); for ( $i =0; $i < Count ( $vars ); $i +=2){ $_GET [ "$vars[$i]" ]= $vars [ $i +1]; } return $_GET ; } mod_rewrite(); $yearn = $_GET [ "year" ]; //结果为'2006' $action = $_GET [ "action" ]; //结果为'_add' echo $yearn ; echo $action ; ?> <?php /* 功能:PHP伪静态化页面的实现 具体用法: 例如链接为:test.php/year/2006/action/_add.html mod_rewrite(); $yearn=$_GET["year"];//结果为'2006' $action=$_GET["action"];//结果为'_add' */ function mod_rewrite(){ global $_GET ; $nav = $_SERVER [ "REQUEST_URI" ]; $script_name = $_SERVER [ "SCRIPT_NAME" ]; $nav = substr ( ereg_replace ( "^$script_name" , "" ,urldecode( $nav )),1); $nav =preg_replace( "/^.ht(m){1}(l){0,1}$/" , "" , $nav ); //这句是去掉尾部的.html或.htm $vars = explode ( "/" , $nav ); for ( $i =0; $i < Count ( $vars ); $i +=2){ $_GET [ "$vars[$i]" ]= $vars [ $i +1]; } return $_GET ; } mod_rewrite(); $yearn = $_GET [ "year" ]; //结果为'2006' $action = $_GET [ "action" ]; //结果为'_add' echo $yearn ; echo $action ; ?> |
个人认为这种方法最直接
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步