Apache PHP project root handler / front controller pattern
I'm running Apache 2.4 locally using php. My goal is each time I make a request it will link to the root of the project folder,http://localhost/project_root/
For example:
http://localhost/project_root/
is requested and links tohttp://localhost/project_root/index.php
a second example:
http://localhost/project_root/foo/bar
would link tohttp://localhost/project_root/index.php
Where the final idea is thathttp://localhost/project_root/index.php
handles redirections and loading of resources.
Thanks in advance and any suggestions are welcome.
Answer
Solution:
For this sort of thing I place an
.htaccess
file in the root of the application:This passes in the remaining portion of the url as
$_GET['q']
, and preserves any other parameters as well.You'll need to make sure
mod_rewrite
is enabled in Apache, and AllowOverride is set toall
in your sites-enabled.Answer
Solution:
What you are looking for is to implement a front controller
http://www.sitepoint.com/front-controller-pattern-1/
To do so you need to use mod_rewrite to force all .php requests to go to your front controller.
The following can go in your .htaccess or apache config (httpd.conf)
Answer
Solution:
You don't need to use mod_rewrite to implement a front-controller pattern, as suggested in the other answers. Apache mod_dir provides the
FallbackResource
directive. For example:This states that for any request that would normally trigger a "404 Not Found", internally rewrite the request to
/project_root/index.php
instead.This is equivalent to the mod_rewrite solution in @rmcfrazier's answer.
Reference: