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:
BASE
element (note that this affects all relative URI);/assets/images/
instead of a relative assets/images/
;/home/
are adjusted to ../assets/images/
to reflect the path depth.Add this line <BASE href="http://www.yoursitename.com/">
to your page inside the <head>
tag as the following:
<head>
<title>Your site title</title>
<BASE href="http://www.yoursitename.com/">
....
</head>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With