.htaccess htaccess重写中断相对路径

.htaccess htaccess重写中断相对路径,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我有一个HTTAccess文件,它映射了问题是,你没有考虑相对URL是在URI的基础上解决的,URI是引用中使用的HTML文档的URI。因此,在URI路径为/home/的HTML文档中,像资产/images/这样的相对URI路径被解析为/home/assets/images/,而不是/assets/images/ http://www.myserver.com/home/ 您不能使用mod_rewrite来更改这一点,因为URI解析是由客户端而不是服务器完成的。唯一的解决办法是: 使用更改基本

我有一个HTTAccess文件,它映射了问题是,你没有考虑相对URL是在URI的基础上解决的,URI是引用中使用的HTML文档的URI。因此,在URI路径为
/home/
的HTML文档中,像
资产/images/
这样的相对URI路径被解析为
/home/assets/images/
,而不是
/assets/images/

http://www.myserver.com/home/ 您不能使用mod_rewrite来更改这一点,因为URI解析是由客户端而不是服务器完成的。唯一的解决办法是:

  • 使用更改基本URI(请注意,这会影响所有相对URI)
  • 使用绝对URI路径,例如
    /assets/images/
    而不是相对
    assets/images/
  • 调整相对URI路径,以便将
    /home/
    中的引用调整为
    。/assets/images/
    以反映路径深度
将这一行
添加到
标签内的页面中,如下所示:

<head>
        <title>Your site title</title>
        <BASE href="http://www.yoursitename.com/">
....
</head>

你的网站标题
....

我试图不必走将所有相对路径转换为绝对路径的道路,但唉,我现在可能不得不这么做。再一次,我完全忘记了基本标签!这很有魅力。谢谢Gumbo,非常感谢。@irot:再次注意,使用
base
更改基URI会影响所有相对URI,而不仅仅是那些具有相对路径的URI。它还会影响带有哈希的锚标记。任何带有href属性(如“#content”)的锚定标记都将解析为基本URL,而不是当前页面。+1所有这些都是新的,我想知道为什么会发生这种情况。这适用于站点根目录中的文件,一个简单的
修复了资产问题。仅供参考,绝对路径是相对于apache中为主机设置的
DocumentRoot
http://www.myserver.com/assets/images/ http://www.myserver.com/assets/css/ http://www.myserver.com/home/assets/images/ http://www.myserver.com/home/assets/images/ http://www.myserver.com/assets/images/
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^([^/]+)/assets/(css|images|js)/(.*)$ /assets/$2/$3 [NC,L]
RewriteRule ^([^/]+)/$ /index.php?section=$1 [NC,L]
<head>
        <title>Your site title</title>
        <BASE href="http://www.yoursitename.com/">
....
</head>