# 404 模拟 URL Rewrite
乐铺的服务器不支持 apache url rewrite,所以之前的网址都很“丑陋”,比如:
http://www.loopo.cn/items.php/110
http://www.loopo.cn/forum.php/1/100
因为这个原因,被几个朋友BS了几次……
今天在 DB 的时候,忽然想到一个办法:乐铺的服务器是支持自定义 404 页面的,这样的话,就可以把所有的请求定位到这个 404 页来处理了,即所有的页面“都是 404”,然后再统一由 404.php
来处理重定向。
花了差不多十分钟,实现了一下,现在乐铺的页面url是类似这样的了:
http://www.loopo.cn/items/110
http://www.loopo.cn/forum/1/100
会好看一些,不知道会不会有什么副作用。
核心代码差不多类似于:
function _404() {
$url = $_SERVER['REQUEST_URI'];
if ($tmp = explode("/", $url)) {
array_shift($tmp);
$_SERVER['PATH_INFO'] = join("/", $tmp);
parse_str($_SERVER['REDIRECT_QUERY_STRING'], $_REQUEST);
parse_str($_SERVER['REDIRECT_QUERY_STRING'], $_GET);
}
$rewrite[] = array('|^/whatnew/?|i', 'whatnew.php');
$rewrite[] = array('|^/whathot/?|i', 'whathot.php');
$rewrite[] = array('|^/whatmiss/?|i', 'whatmiss.php');
foreach ($rewrite as $v) {
if (preg_match($v[0], $url)) {
@header("HTTP/1.1 200 OK");
include ROOT.$v[1];exit;
}
}
}
UPDATE: 在测试的时候,发现 404 头信息已经发出来了,这样的话,可能会有被搜索引擎忽略的危险,后来又把代码改进了一下。加了一个 200 的头信息进去,不知道还会不会有问题,持续跟踪中……
July 4th, 2006 at 00:01
我跟踪了一下,实际访问的时候没有收到404的头信息,所以应该没问题
HTTP/1.1 200 OK
August 27th, 2006 at 21:24
嗯,有点意思
August 28th, 2006 at 21:12
问题是,没法接收post数据
August 28th, 2006 at 21:35
是的,post数据是目前唯一存在的问题。