htaccess rewrite breaks relative paths

让人想犯罪 __ 提交于 2019-12-25 02:58:41

问题


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]

回答1:


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:

  • change the base URI using the BASE element (note that this affects all relative URI);
  • using absolute URI paths, e.g. /assets/images/ instead of a relative assets/images/;
  • adjusting the relative URI path, so references in /home/ are adjusted to ../assets/images/ to reflect the path depth.



回答2:


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>


来源:https://stackoverflow.com/questions/24763316/how-can-i-load-image-and-css-and-js-not-load-after-using-url-rewrite-with-dynami

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!