乐铺博客

记录乐铺成长中的故事与点滴 / 发掘生活中的创意与乐趣

模拟的URL Rewrite~

8 comments, 10,137 Views

乐铺的服务器不支持 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数据的。

分享到:人人网开心网腾讯微博新浪微博豆瓣分享腾讯空间百度搜藏腾讯书签

作者:avenger

2006-07-02 at 10:39 下午

文章分类:开发中的点滴

关键字:

1 分2 分3 分4 分5 分6 分7 分8 分9 分10 分 (1 votes, average: 2.00 out of 10)

8 Responses to '模拟的URL Rewrite~'

Subscribe to comments with RSS or TrackBack to '模拟的URL Rewrite~'.

  1. 服务器是用IIS弄的吧…:)

    roast

    31 七 06 at 11:53 上午

  2. 服务器是apache+linux,不过由于是虚拟主机的缘故,我们没办法更改apache的配置信息,呵呵。

    avenger

    31 七 06 at 1:34 下午

  3. 这种方法很有创意,正好以前我也碰到一个仅支持自定义404页面的虚拟主机,学习一下:)

    smzz

    10 八 06 at 9:13 上午

  4. 404似乎不支持FORM的POST?这个可能在编码上会产生一些问题。

    alore

    13 八 06 at 12:14 下午

  5. PHP和ASP区别很大吗? 如果还有JSP让你来选择的话,你会用哪种语言?

    IsNull

    1 九 06 at 7:18 下午

  6. 不支持.htaccess?

    Sutra

    26 十二 07 at 12:54 上午

  7. 我这边对你的网速很慢,不知道是不是只有我这边慢,建议能不能换个好点的服务器商

    蜡笔汪汪

    12 六 08 at 5:47 下午

  8. 可以通过php://input,读到普通的post数据,但是不支持multipart/form-data类型。需要在html里手动定向到代码的控制器。

    杜宇

    2 四 09 at 11:17 下午

Leave a Reply