【问题标题】:htaccess rewrite breaks relative pathshtaccess rewrite 会破坏相对路径
【发布时间】:2013-08-19 12:42:13
【问题描述】:

我有一个映射的 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]

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    问题是您没有考虑到相对 URL 是在基本 URI 上解析的,该基本 URI 是使用引用的 HTML 文档的 URI。因此,在 HTML 文档中像 assets/images/ 这样的相对 URI 路径带有URI 路径 /home/ 解析为 /home/assets/images/ 而不是 /assets/images/

    您无法使用 mod_rewrite 更改此设置,因为 URI 解析是由客户端完成的,而不是由服务器完成的。唯一的解决方案是:

    • 使用BASE element 更改基本URI(注意这会影响所有相对URI);
    • 使用绝对 URI 路径,例如/assets/images/ 而不是亲戚assets/images/
    • 调整相对URI路径,因此/home/中的引用调整为../assets/images/以反映路径深度。

    【讨论】:

    • 我试图不必走将所有相对路径转换为绝对路径的路径,但唉,我现在可能只需要这样做。再一次,我完全忘记了
      BASE
      标签!这就像一个魅力。谢谢秋葵,不胜感激。
    • @irot:再次注意,使用 BASE 更改基本 URI 会影响 所有 相对 URI,而不仅仅是具有相对路径的那些。
    • 它也会影响带有哈希的锚标签。任何带有 href 属性(如“#content”)的锚标记都将解析为基本 URL,而不是当前页面。
    • +1 对这一切都是陌生的,并且想知道为什么会这样。这是针对站点根目录中的文件,一个简单的<BASE href="/"> 修复了资产问题。
    • 仅供参考,绝对路径是相对于apache中主机设置的DocumentRoot而言的
    【解决方案2】:

    将此行<BASE href="http://www.yoursitename.com/"> 添加到您的页面中的<head> 标记内,如下所示:

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

    【讨论】:

      猜你喜欢
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多