博采众长,精于一技。Live for love, work for dream.

关于URL_REWITE的一个奇怪问题

一直一来都想把万视网的链接静态化,这样有利于SEO。但是前前后后折腾了好几回都失败了,今天总算是勉强解决了。
以下为尝试的办法:
1.首先尝试的是.htaccess文件Rewrite,在本地Window测试一切安好,到了真实服务器就是不行。(服务器确定开启了mod_rewrite模块,要不然我的博客文章的URL也不会这么优美了,呵呵。)
2.既然硬的不行,那咱来软的。根据php的$_SERVER['PATH_INFO']来Rewrite,谁料,Apache就是不给你输出PATH_INFO。(在配置文件加了AcceptPathInfo On依旧无效,Apache你叫我咋说你好呢,尽管几次想把它换掉,装个Nginx,但是懒得去折腾就一直没换)
3.天无绝人之路,仔细看了看$_SERVER输出的东西,里面有个奇怪的值。

[REDIRECT_URL] => /info/id_NTMyNg.html
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /info/id_NTMyNg.html
    [SCRIPT_NAME] => /index.php
    [PHP_SELF] => /index.php
    [REQUEST_TIME] => 1275145077

看到了吧,REDIRECT_URL。心生一念,既然你不输出PATH_INFO,我直接用REDIRECT_URL得了。于是乎,把程序改了改,成了这样:

//静态化Rewrite
 if ( isset($_SERVER["REDIRECT_URL"]) ) {
    $path_info = str_replace('.html', '', $_SERVER["REDIRECT_URL"]);
    list($nothing, $_REQUEST['do'], $param) = explode('/', $path_info);
    if($param){        
        $param = str_replace('_', '=', $param);
        $param = str_replace('-', '&', $param);
        $args = explode('&', $param);
        if($args && is_array($args)){
            foreach($args as $arg){
                list($key, $val) = explode('=', $arg);
                $_REQUEST[$key] = $_GET[$key] = $val;
            }
        }
    }
}

这样URL就可以正确Rewrite了。
例如:
http://www.10000shi.com/index.php?do=info&id=NTMyNg
Rewrite成
http://www.10000shi.com/info/id_NTMyNg.html

而且能够支持两种格式的地址访问,方便调试。

日志信息 »

该日志于2010-05-29 23:38由 Rebill 发表在程序设计分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过评论 RSS订阅这个日志的所有评论。

相关日志 »

赞助链接 »

添加新评论 »

返回顶部
无觅相关文章插件,快速提升流量