2011-05-23 110 views
8

我正在開發一個網頁項目。我決定使用Apache,PHP(5.1.7,由我的服務提供者強加的版本)和Dwoo(模板)來達到這個目的。在PHP中路由URL

我想將URL路由到我的模板。我知道有很多框架在做這種事情。我只是想知道是否有一個很好的方法來實現它沒有。

我建立了我的項目如下:

  • 的src/dwoo - Dwoo文件
  • 的index.php - 這應該處理路由。目前它只是使用模板呈現網站的首頁。
  • 模板 - 表示實際頁面的模板。

業務邏輯的數量很少(沒有真正的模型)。這只是非常靜態的頁面。使用模板使維護工作更容易(繼承即)。

任何想法如何在這種情況下設置路由?我想最好每個給定的URL應該通過index.php路由,然後以某種方式決定要呈現哪個模板(即/ category/pagename將映射到templates/category/pagename.tpl)。

回答

10

使用mod_rewrite將所有內容路由到單個index.php文件。然後在該文件中檢查$_SERVER['REQUEST_URI']中的變量以分派給所需的處理程序。

此配置將使mod_rewrite,如果它的安裝:

DirectorySlash Off 
Options FollowSymLinks Indexes 
DirectoryIndex index.php 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^.*$ - [L] 

RewriteRule ^.*$ index.php [L] 
+0

謝謝。是否需要「選項FollowSymLinks索引」部分?我的主機似乎失敗了(內部服務器錯誤)。沒有它,我會在嘗試訪問索引以外的某個頁面時,收到「在此服務器上未找到請求的URL /appname/index.php」。也許它可能只是一個更好的方法來忘記Apache並找出如何將模板呈現爲HTML〜之前〜我將任何東西上傳到服務器... – 2011-05-23 13:15:38

+0

只有使用符號鏈接時才需要'FollowSymlinks'。這可能不是嚴格需要的。 'Indexes' *是必需的,否則請求'/'不會呈現'index.php'。當你得到'內部服務器錯誤'時,請查看Apache的錯誤日誌以查看問題所在。 – troelskn 2011-05-23 20:23:17

+0

離線渲染文件是一個好主意,原因有很多,但實際上它可能非常複雜。如果你想這樣做,我會建議你使用現有的軟件包,比如Jekyll。 – troelskn 2011-05-23 20:30:37

1

您可能需要使用PEAR的Net_URL_Mapper

+0

看起來很酷。得給這個去。謝謝。 :) – 2011-05-23 18:39:33

2

像trolskn(+1)描述:

使用mod_rewrite路由一切到一個index.php文件。然後在該文件中檢查$_SERVER['REQUEST_URI']中的變量以分派給所需的處理程序。

但我發現下面的.htaccess(放在文件夾與index.php應「消費」後的所有內容)大有幫助:

Options -MultiViews 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [QSA,L] 

此外,我想指出,你可能會遇到該消息

.htaccess: Invalid command 'RewriteEngine', perhaps misspelled 
or defined by a module not included in the server configuration 

這可以很容易地與sudo a2enmod rewrite && sudo service apache2 restartsource

解決
+1

謝謝。 +1。 :) – 2015-05-22 17:06:58