我有一个htaccess文件,用于将
http://www.myserver.com/home/映射到
http://www.myserver.com/index.php?section=home
这部分工作正常。我现在面临的问题是,我的所有图片和CSS都位于名为assets的子文件夹中,即
http://www.myserver.com/assets/images/
http://www.myserver.com/assets/css/等。
重定向后,浏览器会查找
http://www.myserver.com/home/assets/images/下的文件 这会导致事情中断,因为这不是一个有效的路径。
我已经能够添加另一个重写,将上面的内容映射到正确的子文件夹,但是,Firebug显示图像位于:
http://www.myserver.com/home/assets/images/
我知道这不是一个真正的问题,毕竟,我的图像和CSS正在加载这个规则。 我只是好奇如何使路径显示为实际路径,即:
http://www.myserver.com/assets/images/
在下面粘贴我的htaccess文件。非常感谢你。
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([^/]+)/assets/(css|images|js)/(.*)$ /assets/$2/$3 [NC,L]
RewriteRule ^([^/]+)/$ /index.php?section=$1 [NC,L]
答案 0 :(得分:16)
问题在于您没有考虑在基URI上解析相对URL,该基URI是使用引用的HTML文档的URI。因此,HTML文档中的相对URI路径如assets/images/
URI路径/home/
已解析为/home/assets/images/
而不是/assets/images/
。
您无法使用mod_rewrite更改此设置,因为URI解析由客户端完成,而不是由服务器完成。唯一的解决方案是:
BASE
element更改基本URI(请注意,这会影响所有相对URI); /assets/images/
代替亲戚assets/images/
; /home/
中的引用会调整为../assets/images/
以反映路径深度。答案 1 :(得分:8)
将此行<BASE href="http://www.yoursitename.com/">
添加到<head>
标记内的页面中,如下所示:
<head>
<title>Your site title</title>
<BASE href="http://www.yoursitename.com/">
....
</head>