喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

招聘PHP开发人员(北京)

上一主题 下一主题
     
标题: [原创] 用自定义404、403解决apache使用中文、不分大小写的问题  
 
kinpoo
注册会员
Rank: 2
初级会员



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;
}
?>


 附件: 您所在的用户组无法下载或查看附件



矛盾是发展的源泉。
2007-3-16 03:59 PM#1
查看资料  访问主页  发短消息  ICQ 状态  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.027630 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP