htaccess重写打破了相对路径

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);
  • 使用绝对URI路径,例如/assets/images/代替相对assets/images/;
  • 调整相对URI路径,因此/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)