Search code examples
phpapache.htaccessweb

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 to http://localhost/project_root/index.php

a second example:

http://localhost/project_root/foo/bar would link to http://localhost/project_root/index.php

Where the final idea is that http://localhost/project_root/index.php handles redirections and loading of resources.

Thanks in advance and any suggestions are welcome.


Solution

  • 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 sure mod_rewrite is enabled in Apache, and AllowOverride is set to all in your sites-enabled.