如何在CSS的URL中使用相对/绝对路径?

99

我有一个生产环境和开发环境服务器,问题在于目录结构。

开发环境:

  • http://dev.com/subdir/images/image.jpg
  • http://dev.com/subdir/resources/css/style.css

生产环境:

  • http://live.com/images/image.jpg
  • http://live.com/resources/css/style.css

如何让 css 文件夹中的 style.css 在两个服务器上使用相同的 background: url 路径呢?是否可以使用相对路径的技巧来解决?

3个回答

151

该URL是相对于CSS文件的位置,所以这应该适用于您:

url('../../images/image.jpg')

这个相对路径先回到上两级文件夹,然后进入 images 文件夹 - 只要结构相同,它就可以适用于两种情况。

https://www.w3.org/TR/CSS1/#url

部分URL相对于样式表的源而解释,而不是相对于文档解释。


如果我要向后退两步(更新答案),这个代码是否有效?url(../../images/image.jpg) - johnlemon
@anothershrubery - 抱歉,我的第一个示例是有缺陷的。 - johnlemon
@danip - 这应该可以工作,但你没有从 http://domain.com/css/style.css 走两步。我不确定那里能做什么... 编辑: - 是的,它应该可以使用更新的结构,我已经更新了答案(只是另一个 ../,看起来是这样)。 - Kobi

10

就我个人而言,我会在 .htaccess 文件中修复这个问题。您应该可以访问该文件。

将CSS URL定义为以下内容:

url(/image_dir/image.png);
在您的 .htaccess 文件中,添加以下内容:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^image_dir/(.*) subdir/images/$1
或者
RewriteRule ^image_dir/(.*) images/$1

根据网站而定。


2
我也遇到过同样的问题......每次我想发布我的CSS时,都必须进行搜索/替换。对于我来说,相对路径也行不通,因为从开发环境到生产环境的相对路径是不同的。
最终,我厌倦了不停地进行搜索/替换,并创建了动态CSS(例如www.mysite.com/css.php),它是相同的,但现在我可以在CSS中使用我的PHP常量,类似于:
.icon{
  background-image:url('<?php echo BASE_IMAGE;?>icon.png');
}

而且将其设计成动态的也不是一个坏主意,因为现在我可以使用YUI压缩器对其进行压缩,而不会失去在我的开发服务器上的原始格式。

祝你好运!


16
问题中没有“php”标签!提问者可能根本没有使用php。 - Bazzz
6
这只是一个例子,你可以使用PHP、ASP、JSP等,其思想是相同的。 - pleasedontbelong
7
它也可能是静态的。 - jcuenod
4
如果这是在CSS文件中,那么<?php **** ?>将不会被处理。 - JD Vangsness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接