kinpoo
注册会员

初级会员
UID 30794
精华
0
积分 101
帖子 108
金钱 101 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-8-30
状态 离线
|
[广告]: Enom域名自助付费 自助注册 自助PUSH 主流域名COM等一律57.99元年
用自定义404、403解决apache使用中文、不分大小写的问题
示例网站:http://tinpoo.com
<? /** * Filename : redirect.php * Author : kinpoo * Email : kinpoo AT gmail DOT com * Version : 20070316 * example : tinpoo.com * 喜悦首发 */
/** 用自定义404、403解决apache使用中文、不分大小写的问题
为什么不直接用rawurlencode? 1、百度对rawurlencode的支持不好。 2、使用中文更加直观。
本程序还很粗糙,我们还可改进它,使apache完全支持中文,完全支持不分大小写 比如以后我们可以在apache上直接使用[url]http://x.x/[/url]我的实例/我的主页.php?id=1 而不是毫无意义的[url]http://x.x/%CE%D2%B5%C4%CA%B5%C0%FD/%CE%D2%B5%C4%D6%F7%D2%B3.php?id=1[/url] */
header("HTTP/1.1 200 OK"); // 不改变浏览器中的显示 header("expires:0"); header("cache-control:no-cache,must-revalidate"); header("pragma:no-cache");
$uri = url_convert_get(); // ** 转换中文路径(本程序的关键)
$url = ''; $cwd = preg_replace("/^(.*)/([^/]*)$/", "\1", $uri) . '/'; $cwd = rawurldecode($cwd); $fle = strtolower(preg_replace("/^(.*)/([^/]*)$/", "\2", $uri));
if (strpos($uri, '/redirect.php') !== false) { $url = '/'; } elseif (file_exists('.' . $cwd)) { if (in_array($fle, array('index.php', 'index.htm', 'index.html'))) { // #404, 如果此目录存在默认页 则转到默认页 $url = $cwd; } elseif (!$fle) { // #403, 如果不存在默认页 则显示自定义目录索引 $idx = getcwd() . '/index.php'; // 自定义索引文件 chdir('.' . $cwd); if (strpos(getcwd(), '/tinpoo.com/') !== false) { // 在制定目录内 使用此功能 阻止不安全的访问 require_once($idx); die(); } else { header("HTTP/1.1 403 Forbidden"); die('HTTP/1.1 403 Forbidden'); } } else { // #404, 解决文件名不分大小写的问题(此处没有解决目录不分大小写的问题) chdir('.' . $cwd); $dir = opendir('./'); if ($dir) { while ($dir_element = readdir($dir)) { if (strtolower($dir_element) == $fle) { $url = $cwd . $dir_element;; break; } } unset($dir_element); closedir($dir); } } }
if ($url) { $url = _rawurlencode($url); header("Location:$url"); die(); } else { header("HTTP/1.1 404 Not Found"); die('HTTP/1.1 404 Not Found'); }
function url_convert_get() { $u = explode('/', rawurldecode($_SERVER['REQUEST_URI'])); foreach($u as $k => $v) { if ($v != '' && mb_detect_encoding($v)) { // 解决中文与rawurlencode混合的路径使用问题 $u[$k] = mb_convert_encoding($v, 'GBK', mb_detect_encoding($v)); } } $u = implode('/', $u); return $u; }
function _rawurlencode($s) { $s = str_replace('%2F', '/', rawurlencode($s)); return $s; } ?>
附件: 您所在的用户组无法下载或查看附件
|  矛盾是发展的源泉。 |
|