2011-05-23 69 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