让Apache服务器忽略URL的大小写

浏览:3072次阅读
2 条评论

共计 1279 个字符,预计需要花费 4 分钟才能阅读完成。

去年特殊时期,我的博客所在服务器被河蟹后,顺势由ZBLOG转成了Wordpress,由于采用了RSS导入,而前面一部分日志的RSS又不是全文输出的,导致的结果是部分日志在Wordpress里不全。为了照顾搜索引擎同时弥补上述问题带来的不便,我保留了ZBLOG时代的post目录,也就是说,现在仍然可以访问post下的日志,URL不变。但是,在Apache服务器下,有一个很大的问题,即服务器对大小写很敏感,以前用ZBLOG时,日志的URL部分是大写开头的(如: https://chidd.net/post/Cheer-chen.html),Apache服务器把这些大写全部转换成了小写,但是搜索引擎和其他网友引用这些特殊URL时用的还是以前的大写状态。访问 https://chidd.net/post/Cheer-chen.html这个地址时,服务器自然找不到已经变成小写的日志文档,导致404错误。

让Apache服务器忽略URL的大小写,也不是没有解决办法,起先我找到的方法是,修改httpd.con文件,在该文件最后加上:

CheckSpelling on mod_speling

但启动了CheckSpelling会降低Apache的执行效率,所以我博客服务器的管理员不同意在服务器上这样设置。

这样一来,只有想办法用脚本来实现忽略大小写了,今天搜索了下,有个叫hyperjiang的朋友写了段代码可以实现。思路是,把代码写进404页面(404.php),然后服务器会把请求的URL全部转换成小写,转换后能找到就跳到新页面,仍旧找不到就返回首页。

而所需要做的,仅仅是新建一个404文档(404.php),然后把下面的内容粘贴进去即可:

* @date 2007-07-11
* @brief Try to redirect to correct url.
*/
$url = @$_SERVER['REQUEST_URI'];
if (empty($url)) {
header("Location: /");
exit;
}
$newurl = strtolower($url);
if ($url == $newurl) header("Location: /");
else header("Location: $newurl");
?>

注:1.本代码作者:hyperjiang URL:http://hi.baidu.com/frag/blog/item/529f06730fc6e41e8701b0e3.html

2.上述代码保存的文件名不一定非是"404.php"或"notfound.php",具体取什么名字,要看你本身的设置。一般而言,应该保存为"404.php"并覆盖web根目录下的同名文件,而Wordpress系统则需要保存为"404.php"并覆盖wp-content/themes/主题名字/下的同名文件。如果你的服务器允许手动设置404页面,那就更简单了,随便保存为什么文件名(后缀必须是.php),上传至任意位置,只需在设置时指向这个文件即可。

正文完
 0
评论(2 条评论)
2010-09-08 18:10:16 回复

我的情况恰恰和你相反,我是必须打开CheckSpelling,所以现在特别纠结如何解决出现Multiple Choices的问题….

2010-09-12 21:06:48 回复

我也是必须打开checkspelling,有点杯具了
主机又不是特牛逼的那种