关于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
而且能够支持两种格式的地址访问,方便调试。
