2011-10-27 34 views
1

这是我的网址: http://localhost/framework/index.php

echo $_SERVER['REQUEST_URI']; 

将输出:/framework/index.php

,但如果我的网址是:

http://localhost/framework/输出将是:

/framework/ 

,如果我移动的文件,是你的想法。

如何抓住文件夹后的内容/最终index.php文件?我的想法是将index.php作为前端控制器。

如果我有:

http://localhost/framework/index.php/test/test

我只是想测试/测试部分。

http://localhost/framework/test/test

我只是想测试/测试部分。

+0

我只是一直在寻找在$ _ SERVER变量太多,如果我能找到任何给我我想要的东西,没有任何的运气。 PATH_INFO有潜力,但不是我真正想要的。 – John

+1

使用'mod_rewrite'并将所有内容重写为'index.php/your/path'。你的'.htaccess'看起来像:https://gist.github.com/1320584。那么你可以安全地使用Daveo的解决方案。 – mAu

+0

如果我有文件夹,是否也会被重定向?如CSS/ – John

回答

4

可以自动检测基本URI并删除它,让你与测试/测试部分。

if(!empty($_SERVER['PATH_INFO'])) 
{ 
    // Uri info does not contain docroot or index 
    $uri = $_SERVER['PATH_INFO']; 
} 
else 
{ 
    if(!empty($_SERVER['REQUEST_URI']) && !empty($_SERVER['HTTP_HOST'])) 
    { 
     $fullUrl = 'http://' 
        . ((isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : '') 
        . ((isset($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : ''); 

     $uri = parse_url($fullUrl, PHP_URL_PATH); 
    } 
    else if(!empty($_SERVER['PHP_SELF'])) 
    { 
     $uri = $_SERVER['PHP_SELF']; 
    } 
} 

$baseUri = substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], "/")+1); 
$uri = str_replace($baseUri, '', $uri); 

编辑:以上 MAU的评论是正确的。我假设你已经使用mod重写。

+0

如果(如在一个可能性中给出的问题)'index.php'不是请求URI的一部分? – hakre

+0

更新的代码。上述工作对我来说很好。脚本名称仍然有效,无论它是否显示在绝对URL中。 – Daveo

+0

@Daveo虽然,答案是好的,你可以请尽量给出答案的更深入的问题http://stackoverflow.com/questions/12711371 – harry