香港高速VIP云机房火爆上线啦!无需备案,开通即用!配套《巅云自助建站系统3.0》将带给您飞一般的可视化拖拽建站体验,欢迎免费体验。

php快速url重写更新版[需php 5.30以上]

一佰互联网站制作(www.yinxi.net) 发布日期 2019-04-30 09:22:31 浏览数: 13

对于apache的rewrite模块打开和设置则非本文主题,请见其他文章详解.

这个类只能php 5.30以上的版本才能使用,继承了上一个版本的快速重定向的特点(单独类,全部使用静态调用),增添了一个很重要的功能和属性 可以调用其他url中的模块了 也使得模块与模块间或页面与页面间的函数简化共享得以实现

.htaccess文件写法:
复制代码 代码如下:
#-------------- .htaccess start ---------------

RewriteEngine on
RewriteRule !.(js|ico|gif|jpg|png|css|swf|htm|txt)$ index.php
php_flag magic_quotes_gpc off
php_flag register_globals off

#-------------- .htaccess end ---------------



重写功能引入:让站点根目录的index.php末尾写上下列代码,重写就开启了(正常条件:1.apache的重写配置成功,且开启了.htaccess支持的.2.站点根目录的.htaccess文件设置好了.3.class.rewrite.php类文件在index.php前面部分加载了.4.页面模块文件位置及写法无误):
复制代码 代码如下:
//............

Rewrite::__config(
$config["path"],/*"http://xxxxx/mysite/"URL基础位置*/
$config["md_path"],/*"c:/phpsite/www/mysite/modules/"模块文件物理目录*/
array(
"phpinfo"
)
);
Rewrite::__parse();

//..........

模块文件写法:

testPk.php
复制代码 代码如下:
<?php
class Rw_testPk extends Rewrite {

//这个是前导函数,只要访问到testpk这个页面,这个必然会执行,可用来控制本页面内函数访问权限或本页面全局变量
public static function init(){
//if (!defined("SITE_PASS")){
echo self::$linktag."<br/>";//self::$linktag是页面解析位置路径值,会常使用.
//}
}

//当访问"http://localhost/testpk/"时会执行
public static function index(){
echo "test";
}

//当访问"http://localhost/testpk/blank"时会执行或写作"http://localhost/testpk/index/blank"一般"index/"都是可以被省略的
public static function blank(){}
}
?>

class.rewrite.php;
复制代码 代码如下:
<?php

class Rewrite{

public static $debug = false;//是否打开调试
public static $time_pass = 0;//获得模块文件整体执行时间
public static $version = 2.2;
public static $pretag = "Rw_";//模块文件类的名称前缀

public static $linktag = "index";//页面链接标记,用来标记解析的是那个链接,可用来控制各种菜单效果和链接访问权限

protected static $time_start = 0;
protected static $time_end = 0;
protected static $physical_path = "";//模块文件的物理路径
protected static $website_path = "";//模块文件的站点路径,因为可能把站点放大站点的子目录下,如:http://localhost/site/mysite
protected static $ob_contents = "";
protected static $uid = 0;//配合个人主页访问方式 如http://localhost/423/则是访问http://localhost/profile?uid=423

//允许的系统函数如$allow_sys_fun=array("phpinfo")那么系统将允许链接访问phpinfo内容了,当http://localhost/phpinfo或http://localhost/......./phpinfo时就会直接执行phpinfo这个函数,不需要phpinfo.php模块文件
private static $allow_sys_fun = array();

private static function __get_microtime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}


//设置调试Rewrite::__debug(true);
public static function __debug($d = true){
static::$debug = $d;
}

//配置路径和允许函数
public static function __config($website_path = "",$physical_path = "",$allow_sys_fun = array()){
self::$physical_path = $physical_path;
self::$website_path = $website_path;
self::$allow_sys_fun = $allow_sys_fun;
}

//调试函数
public static function __msg($str){
if(static::$debug){
echo " <pre> ".print_r($str,true)." </pre> ";
}
}

//解析开始时间
public static function __start(){
self::$time_start = self::__get_microtime();
}

//解析结束时间
public static function __end($re = false){
self::$time_end = self::__get_microtime();
self::$time_pass = round((self::$time_end - self::$time_start),6) * 1000;
if($re){
return self::$time_pass;
}else{
self::__msg("PASS_TIME: ".self::$time_pass." ms");
}
}

//内部跨模块url解析调用,如在test1.php模块页面中执行了Rwrite::__parseurl("/test2/show")这句,将调用test2.php模块页面中的show方法(Rw_test2这个class的方法)
public static function __parseurl($url = "",$fun = "",$data = NULL){
if(!empty($url)&&!empty($fun)){
$p = static::$physical_path;
if(file_exists($p.$url) || file_exists($p.$url.".php") ){
$part = strtolower(basename( $p.$url , ".php" ));
static::$linktag = $part."/".$fun;
$fname = static::$pretag.$part;
if(class_exists($fname, false)){
if(method_exists($fname,$fun)){
return $fname::$fun($data);
}
}else{
include( $p.$url );
if( class_exists($fname, false) && method_exists($fname,$fun)){
return $fname::$fun($data);
}
}
}
}
}

//核心链接解析函数Rwrite::__parse();在顶级重写核心定向目标index.php中的执行,意味着Rwrite自定义重写开启
public static function __parse($Url = ""){
self::__start();
$p = static::$physical_path;
$w = static::$website_path;
$req_execute = false;

$url_p = empty($Url) ? $_SERVER["REQUEST_URI"] : $Url;
$local = parse_url($w);
$req = parse_url($url_p);
$req_path = preg_replace("|[^w/.\]|","",$req["path"]);
$req_para = empty($Url) ? strstr($_SERVER["SERVER_NAME"],".",true) : "www";
if(empty($Url) && substr_count($_SERVER["SERVER_NAME"],".") == 2 && $req_para != "www"){
self::__goto($req_para,preg_replace("|^".$local["path"]."|","",$req_path));
return ;
}else{
$req_path_arr = empty($req_path)?array():preg_split("|[/\]+|",preg_replace("|^".$local["path"]."|","",$req_path));
$req_fun = array_pop($req_path_arr);
if(substr($req_fun,0,2)=="__"){
$req_fun = substr($req_fun,2);
}
$req_path_rearr = array_filter($req_path_arr);

self::__msg($req_path_rearr);

$req_temp = implode("/",$req_path_rearr);
$fname = $req_temp."/".$req_fun;
if(!empty($req_fun)&&in_array($req_fun,static::$allow_sys_fun)){
$req_fun();
}else{
if(!empty($req_fun)&&file_exists($p.$fname.".php") ){
include( $p.$fname.".php" );
}else{
$fname = empty($req_temp) ? "index" : $req_temp;
if(file_exists($p.$fname.".php") ){
include( $p.$fname.".php" );
}else{
$fname = $req_temp."/index";
if(file_exists($p.$fname.".php")){
include( $p.$fname.".php" );
}else{

//这个地方是对"个人主页"的这种特殊链接定向到"profile/"了,可自己修改
//如:www.xxx.com/12/将表示www.xxx.com/profile/?uid=12或www.xxx.com/profile?uid=12


$uid = is_numeric($req_temp) ? $req_temp : strstr($req_temp, "/", true);
$ufun = is_numeric($req_temp) ? "index" : strstr($req_temp, "/");
if(is_numeric($uid)){
self::$uid = $uid;
if(!isset($_GET["uid"])) $_GET["uid"] = $uid;
$fname = "profile/".$ufun;
if(file_exists($p.$fname.".php")){
include( $p.$fname.".php" );
}else{
header("location:".$w);
exit();
}
}else if(file_exists($p."index.php")){
$fname = "index";
include( $p."index.php" );
}else{
header("location:".$w);
exit();
}
}
}
}
$ev_fname = strrpos($fname,"/")===false ? $fname : substr($fname,strrpos($fname,"/")+1);
$ev_fname = static::$pretag.$ev_fname;
if( class_exists($ev_fname, false) && method_exists($ev_fname,$req_fun)){
static::$linktag = $req_fun=="index" ? $fname."/" : $fname."/".$req_fun;
if($req_fun != "init" && method_exists($ev_fname,"init")){
$ev_fname::init();
}
$ev_fname::$req_fun();
}else if( class_exists($ev_fname, false) && method_exists($ev_fname,"index") ){
static::$linktag = $fname."/";
if(method_exists($ev_fname,"init")){
$ev_fname::init();
}
$ev_fname::index();
}else if( $fname != "index" && class_exists(static::$pretag."index", false) && method_exists(static::$pretag."index","index") ){
$ev_fname = static::$pretag."index";
static::$linktag = "index/";
if(method_exists($ev_fname,"init")){
$ev_fname::init();
}
$ev_fname::index();
}else{
self::__msg("Function Not Exist!");
}
}
}
self::__end();
}

//这里是用户自定义链接的解析(用数据库存储的解析值) 如: xiaoming.baidu.com

//数据库中 xiaoming这个标签指向一个人的博客 就会到了www.baidu.com/blog?uid=12或www.baidu.com/blog?uname=xiaoming(这个就看自己咋设计数据库了)

public static function __goto($para = "",$path = ""){
$w = static::$website_path;
if(empty($para)){
exit("未知链接,解析失败,不能访问");
}
if(class_exists("Parseurl")){
$prs = Parseurl::selectone(array("tag","=",$para));
self::__msg($prs);
if(!empty($prs)){
$parastr = $prs["tag"];
$output = array();
$_GET[$prs["idtag"]] = $prs["id"];
parse_str($prs["parastr"], $output);
$_GET = array_merge($_GET,$output);
$path = $prs["type"]."/".preg_replace("|^/".$prs["type"]."|","",$path);
self::__msg($path);
header("location:".$w.$path."?".http_build_query($_GET));
exit();
}else{
header("location:".$w);
exit();
}
}else{
header("location:".$w);
exit();
}
}
}
?>

一佰互联是全国知名建站品牌服务商,我们有九年网站建设、网站制作、网页设计、php开发和域名注册及虚拟主机服务经验,提供的自助建站服务更是全国有名。近年来还整合团队优势自主开发了可视化多用户”巅云建站系统“3.0平台版,拖拽排版网站制作设计,轻松实现pc站、手机微网站、小程序、APP一体化全网营销网站建设 ,已成功的为全国上百家网络公司提供自助建站平台搭建服务。

相关新闻more

03
05月
网站优化的必要做法:增加网站外链常见的几种方

从事网站优化相关工作的人员都清楚“内容为王,外链为皇”的这样一种说法,这是传统SEO思想的精华,同时它也说明了&ld... >>详情

29
04月
解决file_get_contents无法请

错误: Warning: fopen() [function.fopen]: Unable to find the wrapper "htt... >>详情

14
05月
【seo定义】SEO营销的本质是什么?_巅云

【seo定义】SEO营销的本质是什么? SEO营销的本质是什么?绝大部分人会回答:满足用户需求并马上转化成盈利。起因大概是因为是... >>详情

29
03月
商水农商银行密织网络安全“防护罩”

简介:映象网周口讯(记者 金江涛 通讯员 杜涛 谭雪琴)为确保元旦期间各项系统安全、稳定运行,商水农商银行多措并举,狠抓科技制度执行力,落实... >>详情

营业执照. cdn加速服务 备案系统认证 网络安全协会 我们的支付方式AAA认证
上海 北京 深圳 广州 天津 杭州 南京 武汉 成都 沈阳 大连 长沙 济南 青岛 苏州 福州 无锡 哈尔滨 宁波 重庆 大庆 厦门 西安 长春 珠海 郑州 海口 昆明 太原 石家庄 温州 合肥 乌鲁木齐 南宁 南通 合肥 兰州 呼和浩特 贵阳 烟台 秦皇岛 包头 唐山 银川 汕头 连云港 威海 西宁 湛江 北海 万州 涪陵 长寿 黔江 永川 丰都 忠县 江津 南川 开县 云阳 万盛 梁平 垫江 巫山 城口 建站宝盒 免费建站 门户网站建设 微信网站 手机网站 门户网站制作

7x24小时服务电话:18581389571 传真:023-85725751 免费建站交流群:236412099 139947842(自助建站交流) E-Mail:post@yinxi.net 网站投诉:
重庆楚捷科技有限公司 一佰互联©版权所有 自助建站(www.yinxi.net,Inc.) 2001-2020 All Rights Reserved 本站程序受法律保护,网站法律顾问:ITLAW-庄毅雄律师
中华人民共和国信息产业部网站备案号:渝ICP备12000592号