2012-11-03 172 views
0

下面工作的代碼是這樣的:PHP動態頁面自定義鏈接

http://www.website.com/?page=home會拉內容從http://www.website.com/home.php

- 或 -

http://www.website.com/?page=About從拉內容http://www.website.com/About.php

代碼:

// Set the default name 
$action = 'home'; 

// Specify some disallowed paths 
$disallowed_paths = array('admin'); 

if (!empty($_GET['page'])) { 
    $tmp_action = basename($_GET['page']); 
    // If it's not a disallowed path, and if the file exists, update $action 
    if (!in_array($tmp_action, $disallowed_paths) && file_exists("{$tmp_action}.php")) 
     $action = $tmp_action; 
} 
// Include $action 
include("$action.php"); 
?> 

上面的代碼工作正常,我所有的網頁,但現在我有一個自定義鏈接我需要添加http://www.website.com/?page=Search拉從http://www.website.com/search/search.php而不是http://www.website.com/Search.php內容

我該怎麼做?

感謝

回答

3

有2個選項,你可以總是查找文件中的子文件,或者你可以像你一樣disallowed_pa​​ths確實有自己的路徑頁面的特別清單了。

$special_paths = array(
    "search" => "search/search.php", 
); 

if(in_array($_GET['page'], $special_paths)) { 
    $action = $special_paths[$_GET['page']]; 

這意味着如果未來另一個特殊頁面存在不同的路徑,您可以簡單地將它添加到數組中。然後

全部代碼如下:

<?php 
    // Set the default name 
    $action = 'home.php'; 

    // Specify some disallowed paths 
    $disallowed_paths = array('admin'); 

    // special paths 
    $special_paths = array(
      "search" => "search/search.php", 
      "special_b" => "a/different/lengthier/path/file.php", 
    ); 

    if (!empty($_GET['page'])) { 
      $tmp_action = basename($_GET['page']); 

      // If it's not a disallowed path, and if the file exists, update $action 
      if (!in_array($tmp_action, $disallowed_paths) && file_exists("{$tmp_action}.php")) { 
        $action = $tmp_action.".php"; 
      } elseif(isset($special_paths[$tmp_action])) { 
        $action = $special_paths[$tmp_action]; 
      } 
    } 

    // Include $action 
    include("$action"); 
+0

還應該注意你應該考慮強制所有字符串處理文件全部爲小寫內部小寫字母。此外,我不會這樣寫代碼,但我想保持它與問題代碼儘可能相似 – sam

+0

確定它的工作原理謝謝!但只需要在'$ action ='home';'中添加.php作爲'$ action ='home.php';' –

+0

根據項目的規模,您可能需要擴展此解決方案將這些數據存儲在數據庫中更加靈活。然後,您可以將這些數據緩存在Web服務器上,以避免爲每個頁面加載查詢數據庫。但是,將網頁硬編碼爲數組當然也是保持簡單的一種方法。 – Andy0708