I have an htaccess file which maps
http://www.myserver.com/home/
to
http://www.myserver.com/index.php?section=home
This part works fine. The issue I am facing now is, all my images and css reside in a sub-folder named assets, i.e.
http://www.myserver.com/assets/images/
http://www.myserver.com/assets/css/
etc.
After redirection the browser will look for the files under
http://www.myserver.com/home/assets/images/
which causes things to break, as this is not a valid path.
I have been able to add another rewrite that maps the above to the correct sub-folder, however, Firebug shows that the images are residing in:
http://www.myserver.com/home/assets/images/
I know it’s not really a problem, after all, my images and css are loading just fine with this rule.
I’m just curious as to how I could make the path shown to be the actual path, which is:
http://www.myserver.com/assets/images/
Pasting my htaccess file below. Thank you very much beforehand.
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([^/]+)/assets/(css|images|js)/(.*)$ /assets/$2/$3 [NC,L]
RewriteRule ^([^/]+)/$ /index.php?section=$1 [NC,L]
The problem is that you didn’t consider that relative URLs are resolved on the base URI that is the URI of the HTML document the reference is used in. So a relative URI path like
assets/images/in an HTML document with the URI path/home/is resolved to/home/assets/images/instead of/assets/images/.You cannot change this with mod_rewrite as URI resolution is done by the client and not by the server. The only solutions are:
BASEelement (note that this affects all relative URI);/assets/images/instead of a relativeassets/images/;/home/are adjusted to../assets/images/to reflect the path depth.