I’m developing a PHP website that uses url routing. I’d like the site to be directory independent, so that it could be moved from http://site.example.com/ to http://example.com/site/ without having to change every path in the HTML. The problem comes up when I’m linking to files which are not subject to routing, like css files, images and so on.
For example, let’s assume that the view for the action index of the controller welcome contains the image img/banner.jpg. If the page is requested with the url http://site.example.com/welcome, the browser will request the image as http://site.example.com/img/banner.jpg, which is perfectly fine. But if the page is requested with the url http://site.example.com/welcome/index, the browser will think that welcome is a directory and will try to fetch the image as http://site.example.com/welcome/img/banner.jpg, which is obviously wrong.
I’ve already considered some options, but they all seem imperfect to me:
-
Use url rewriting to redirect requests from (*.css|*.js|…) or (css/*|js/*|…) to the right path.
Problems: Every extension would have to be named in the rewrite rules. If someone would add a new filetype (e.g. an mp3 file), it wouldn’t be rewritten.
-
Prepend the base path to each relative path with a php function. For example:
<img src='<?php echo url::base(); ?>img/banner.jpg' />Problems: Looks messy; css– and js-files containing paths would have to be processed by PHP.
So, how do you keep a website directory independent? Is there a better/cleaner way than the ones I came up with?
You could put in the head
This will mean the browser will request any non-absolute URLs relative to that path.
However I am not sure how this would affect URLs embedded in CSS files etc.This does not affect paths defined in CSS files. (thanks mooware)