Routing URLs in PHP
I'm working on a web page project. I decided to use Apache, PHP (5.1.7, version imposed by my service provider) and Dwoo (templating) for this purpose.
I want to route URLs to my templates. I'm aware there are many frameworks doing this kind of thing. I'm just wondering if there's a nice way to achieve it without.
I've set up my project as follows:
- src/dwoo - Dwoo files
- index.php - This should handle routing. Currently it just renders the front page of the site using a template.
- templates - Templates that represent actual pages.
There is minimal amount of business logic (no real model). It's all just pretty static pages. Using templates makes maintenance work easier (inheritance ie.).
开发者_开发百科Any idea how to set up routing in this case? I guess ideally each given URL should route via index.php that then somehow decides which template to render (ie. /category/pagename would map to templates/category/pagename.tpl).
Use mod_rewrite
to route everything to a single index.php
file. Then check the variable in $_SERVER['REQUEST_URI']
within this file to dispatch to the required handler.
This configuration will enable mod_rewrite
, if it's installed:
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]
Like trolskn (+1) describes:
Use
mod_rewrite
to route everything to a singleindex.php
file. Then check the variable in$_SERVER['REQUEST_URI']
within this file to dispatch to the required handler.
But I found the following .htaccess
(placed in the folder with the index.php
which should "consume" everything after it) much more helpful:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Also I would like to note that you might encounter the message
.htaccess: Invalid command 'RewriteEngine', perhaps misspelled
or defined by a module not included in the server configuration
This can easily be solved with sudo a2enmod rewrite && sudo service apache2 restart
(source)
You might want to use PEAR's Net_URL_Mapper.
精彩评论