php 模拟 rewrite,使用PHP模拟 URL Rewrite

项目中有许多的服务器不支持Rewrite,或者配置起来太麻烦,看到许多网站也采用了下面方式的Rewrite方法,于是想到可以用PHP模拟一个这样URL。

复制内容到剪贴板

代码:

?a/haha/b/hehe/d/hoho.html

通过实例化类后,也可以通过$_GET及$_SERVER["QUERY_STRING"]正常获取到页面GET参数的传递,并附加了$_SERVER["R_QUERY_STRING"]预定义变量。这样许多的项目就可以通过不用太大的改变就可以实现Rewrite了。

这个类同时支持以下几种模拟的URL,同时支持原始形态的URL地址,并自动删除值为空的参数和值:

复制内容到剪贴板

代码:

?a/haha/b/hehe/d/hoho.html

?a/haha/b/hehe/d/hoho/

?a/haha/b/hehe/d/hoho

代码刚写完,来不及做更多测试,希望大家多多指出代码中的错误和问题。

下面是这个类的代码 (url_rewrite.class.php):

复制内容到剪贴板

代码:

class URLRewrite {

var $_query_string;

/**

* 构造函数

*

*/

function URLRewrite() {

$this->_query_string = str_replace('.html', '', $_SERVER["QUERY_STRING"]);

}

/**

* 返回模拟 Rewirte 形态页面传递字符串

*

*/

function GetRewriteString() {

if (!strpos($this->_query_string, '&')) return $this->_query_string;

$URLArray = explode('&', $this->_query_string);

for ($i=0; $i

if (strpos($URLArray[$i], '=')+1 != strlen($URLArray[$i]))

$ParaArray[] = str_replace('=', '/', $URLArray[$i]);

}

return implode('/', $ParaArray);

}

/**

* 返回模拟 Rewirte 形态的 URL 地址

*

*/

function GetRewriteUrl() {

return $_SERVER['PHP_SELF'] . '?' . $this->GetRewriteString() . '.html';

}

/**

* 返回原始形态页面传递字符串

*

*/

function GetOriginalString() {

if (!strpos($this->_query_string, '/')) return $this->_query_string;

$URLArray = explode('/', $this->GetRewriteString($this->_query_string));

for ($i=0; $i

if ($URLArray[$i] && $URLArray[$i+1])

$ParaArray[] = $URLArray[$i] . '=' . $URLArray[$i+1];

}

return implode('&', $ParaArray);

}

/**

* 返回原始形态的 URL 地址

*

*/

function GetOriginalUrl() {

return $_SERVER['PHP_SELF'] . '?' . $this->GetOriginalString();

}

/**

* 将解析的参数写入到 $_GET 预定义变量

*

*/

function ParseUrl() {

$URLArray = explode('/', $this->GetRewriteString());

$_GET = '';

for ($i=0; $i

$_GET[$URLArray[$i]] = $URLArray[$i+1];

}

$_SERVER["QUERY_STRING"] = $this->GetOriginalString();

$_SERVER["R_QUERY_STRING"] = $this->GetRewriteString();

}

}

测试一下使用后的效果:

复制内容到剪贴板

代码:

include_once ('url_rewrite.class.php');

$ReURL = new URLRewrite();

$ReURL->ParseUrl();

echo '$_SERVER["QUERY_STRING"]:' . $_SERVER["QUERY_STRING"] . '
';

echo '$_SERVER["R_QUERY_STRING"]:' . $_SERVER["R_QUERY_STRING"] . '
';

echo '原始形态的URL地址:' . $ReURL->GetOriginalUrl() . '
';

echo '模拟形态的URL地址:' . $ReURL->GetRewriteUrl() . '
';

echo '--------------------------------------------------------------------------------';

echo '$_GET[/'a/'] = ' . $_GET['a'] . '
';

echo '$_GET[/'b/'] = ' . $_GET['b'] . '
';

echo '$_GET[/'c/'] = ' . $_GET['c'] . '
';

echo '$_GET[/'d/'] = ' . $_GET['d'] . '
';

URL地址为test.php?a=haha&b=hehe&c=&d=hoho时的显示结果:

引用:

$_SERVER["QUERY_STRING"]:a=haha&b=hehe&d=hoho

$_SERVER["R_QUERY_STRING"]:a/haha/b/hehe/d/hoho

原始形态的URL地址:test.php?a=haha&b=hehe&d=hoho

模拟形态的URL地址:test.php?a/haha/b/hehe/d/hoho.html

--------------------------------------------------------------------------------

$_GET['a'] = haha

$_GET['b'] = hehe

$_GET['c'] =

$_GET['d'] = hoho

URL地址为test.php?a/haha/b/hehe/d/hoho时的显示结果:

引用:

$_SERVER["QUERY_STRING"]:a=haha&b=hehe&d=hoho $_SERVER["R_QUERY_STRING"]:a/haha/b/hehe/d/hoho 原始形态的URL地址:test.php?a=haha&b=hehe&d=hoho 模拟形态的URL地址:test.php?a/haha/b/hehe/d/hoho.html -------------------------------------------------------------------------------- $_GET['a'] = haha $_GET['b'] = hehe $_GET['c'] = $_GET['d'] = hoho

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值