乐铺的服务器不支持 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的头信息进去,不知道还会不会有问题,持续跟踪中……
UPDATE:注意,这样“rewrite”出来的网址是不支持POST数据的。



服务器是用IIS弄的吧…:)
roast
31 七 06 at 11:53 上午
服务器是apache+linux,不过由于是虚拟主机的缘故,我们没办法更改apache的配置信息,呵呵。
avenger
31 七 06 at 1:34 下午
这种方法很有创意,正好以前我也碰到一个仅支持自定义404页面的虚拟主机,学习一下:)
smzz
10 八 06 at 9:13 上午
404似乎不支持FORM的POST?这个可能在编码上会产生一些问题。
alore
13 八 06 at 12:14 下午
PHP和ASP区别很大吗? 如果还有JSP让你来选择的话,你会用哪种语言?
IsNull
1 九 06 at 7:18 下午
不支持.htaccess?
Sutra
26 十二 07 at 12:54 上午
我这边对你的网速很慢,不知道是不是只有我这边慢,建议能不能换个好点的服务器商
蜡笔汪汪
12 六 08 at 5:47 下午
可以通过php://input,读到普通的post数据,但是不支持multipart/form-data类型。需要在html里手动定向到代码的控制器。
杜宇
2 四 09 at 11:17 下午