2011-10-27 50 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