iro*_*rot 14 .htaccess mod-rewrite url-rewriting
我有一个映射的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]Run Code Online (Sandbox Code Playgroud)
Gum*_*mbo 17
问题是,你没有考虑到相对URL的基本URI是HTML文档的引用中使用的URI上解决.所以,像一个相对URI路径assets/images/与URI路径在HTML文档中/home/被解析为/home/assets/images/代替的/assets/images/.
您无法使用mod_rewrite更改此值,因为URI解析由客户端完成,而不是由服务器完成.唯一的解决方案是:
BASE元素更改基URI (请注意,这会影响所有相对URI);/assets/images/代替相对assets/images/;/home/调整引用../assets/images/以反映路径深度.小智 9
将此行添加<BASE href="http://www.yoursitename.com/">到<head>标记内的页面,如下所示:
<head>
<title>Your site title</title>
<BASE href="http://www.yoursitename.com/">
....
</head>
Run Code Online (Sandbox Code Playgroud)