2013-10-22 131 views
1

林建設一個自定義網站使用PHP,它幾乎像一個CMS,在這裏我將有類別,子類別和頁/職位,所以我的預期網址就像是處理URL參數

mysite.com/category/sub-category/page-name/ 

這個層次是不是恆定的,我可能會得到3級或更多的子類別,而我也將有分頁參數在同一個URL像

mysite.com/category/sub-category/page-name/6 

所以,在我的網站的index.php將只處理所有URL像其他CMS,但我不知道如何拆分這個網址,以及如何知道哪個是頁面名稱,哪個分頁參數,這是類別參數和所有,請幫助我實現這一目標。

+0

看看更簡單的PHP框架之一,例如'CodeIgniter'。要麼使用其中的一個,要麼看他們如何做出這些確切的決定。 Bsaically你必須知道,你將始終從最重要的參數開始,即類別和從最左邊到最右邊的參數工作。 – RiggsFolly

+0

使用'$ _SERVER ['PHP_SELF']'獲取當前正在執行的腳本的文件名。 –

+0

@joke:嗨,Index.php將文件負責任,它將包括所有其他所需的文件,它不是關於腳本名稱,只是想知道如何處理url,就像在RiggsFolly中說的那樣,CodeIgnitor如何處理URL ,或者WP如何做? –

回答

0

你所追求的是一個「前端控制器」,一個處理每個請求進入你的應用程序的單個PHP文件。

正如RiggsFolly所提到的,大多數PHP框架都內置了這個框架。這裏是Symfony的前端控制器(我最喜歡的PHP框架)

// index.php 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
$request = Request::createFromGlobals(); 
$path = $request->getPathInfo(); // the URI path being requested 

if (in_array($path, array('', '/'))) { 
    $response = new Response('Welcome to the homepage.'); 
} elseif ($path == '/contact') { 
    $response = new Response('Contact us'); 
} else { 
    $response = new Response('Page not found.', 404); 
} 
$response->send(); 
+0

謝謝,但是如果URL上只有一個值,我可以像這樣去做,而且它的doens在我的腳本中很重要,可以像domain.com/my-page一樣執行單個值,但可能它會包含很多東西,類別層次結構詳細信息,可能在網址 –

+0

之後加入一些日期結構,如Wp或一些分頁頁碼。上面的代碼處理這個問題。只需爲每條路線添加一個額外的「elseif」即可。 –