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.




For this sort of thing I place an.htaccess file in the root of the application:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d  #Optional: Only if it's not a valid directory
RewriteCond %{REQUEST_FILENAME} !-f  #Only if it's not a valid file
RewriteRule (.*) index.php?q=$1 [L,QSA]

This passes in the remaining portion of the url as$_GET['q'], and preserves any other parameters as well.

You'll need to make suremod_rewrite is enabled in Apache, and AllowOverride is set toall in your sites-enabled.




What you are looking for is to implement a front controller

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)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ project_root/index.php



You don't need to use mod_rewrite to implement a front-controller pattern, as suggested in the other answers. Apache mod_dir provides theFallbackResource directive. For example:

FallbackResource /project_root/index.php

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.


People are also looking for solutions to the problem: mysql - PHP Form Insertion Into Specific Table Within Db


Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.