为什么一些专业网页设计师在使用CSS、JavaScript、图片等时会使用绝对路径而非相对路径?

13

我曾经认为所有人都使用相对路径(例如/styles/style.css)。但我想知道为什么一些流行的网络设计师(例如http://www.getfinch.comhttp://31three.com/)使用绝对路径(http://example.com/styles/style.css)。

因此,我的问题基本上是:为什么一些专业设计师使用绝对路径而不是相对路径?


@Gert G 我考虑过那个,但是开玩笑吧哈哈 - alexchenco
2
绝对路径引用的域名是否与页面所在的域名不同?也就是说,网站A使用的CSS或图像文件实际上位于网站B上? - slugster
1
如果您的页面使用https协议调用,任何相对路径的CSS也将使用https协议调用。您真的需要加密/解密CSS内容吗? :D但是,如果您使用绝对路径引用外部CSS,可以指定要使用的协议,通常为http而不是https。请注意,https会给您的服务器带来额外的工作。 - Second Person Shooter
@xport - 一位同事刚指出,在浏览器中这可能会引发警告,因为它将传回安全和不安全的信息。 - Andrew
13个回答

9

这两个都使用ExpressionEngine CMS,很可能是CMS链接样式表的方式不同。

但实际上这只是个人喜好问题。我个人更倾向于使用根相对路径/css/main.css,因为这样如果我在本地离线开发时,就不必担心将WEB_ROOT常量切换到本地(减少麻烦且更简洁)。

我唯一看到绝对路径的情况是,如果域名使用CDN(内容分发网络),并且域名与源域名不同。


我完全同意,但如果它是CDN,那么按照通常的定义,它首先不在您的Web根目录中(并且希望是完全独立的服务器/进程)。因此,当然您会像调用www根目录和/或服务器之外的任何其他内容一样使用URI来调用它。 - B. Shea
使用绝对路径可以保护您的内容免受盗版吗?您可以在cpanel中使用绝对路径并打开热链接保护,对吗?还是这个想法很愚蠢? - user2806040

2

2
相对路径
我认为两者都没有太大区别。使用相对路径在离线工作时更容易,然后上传网站即可。
另外,如果您想要更改域并仍要保留您的网站,则只需要更改引用的绝对链接,相对链接将正常工作。
绝对路径
浏览器在任何给定时间只能从服务器下载2个文件。而且,在下载JavaScript时不会下载其他任何内容。因此,为了规避这种2个文件限制,许多人使用子域。例如:http://css.example.com/style.css -- 这是为了增加页面加载速度。使用相对URL无法实现此效果。
您需要注意绝对路径的一个地方是在进行AJAX调用时。如果您在JavaScript中硬编码调用以下url:http://www.example.com/ajaxfile.php -- AJAX调用将从http://www.example.com/index.php正常工作,但从http://example.com/index.php则不行--这是由于同源策略造成的。

1

我认为这取决于个人偏好(最有可能)或可移植性。如果您的文件引用了完全限定的 URL,则在其他地方使用 html 时无需包含那些文件,它将继续从远程站点获取。

就我的经验而言,这更取决于平台,例如 .Net 使用 ~/ 表示应用程序根目录,在 HTML 中呈现为 /path/file.css,只是因为这是从代码端渲染的一条简单路径……一种选择最少阻力的方式。

另一个情况是,如果您正在从另一个域加载内容,例如此处的 sstatic.net,您实际上没有选择,它必须是完全限定的。


1

我认为这只是个人偏好的问题。我更喜欢使用相对URL,因为如果你要更改(子)域名,那么更改起来就不会那么麻烦。但是,如果你有一个CMS或博客,它通常会自动处理这个问题(例如:{SITE_URL}/path/to/page)。


1
我认为一些Apache重定向规则在使用相对路径时存在问题。选择绝对路径可以确保.htaccess文件被正确处理。

0

这取决于您正在构建的应用程序,例如。如果您的应用程序使用像示例中一样的MVC框架,则必须使用绝对路径,因为它们调用的CSS不属于每个页面的相对路径。

编辑

使用MVC框架并不意味着必须使用绝对路径,而是也可以使用相对路径。这只是我的个人偏好。


不,仅仅因为你使用MVC并不能说明你的路径有什么特别之处。在他们的情况下,他们也可以使用相对链接,这样也可以正常工作。我在所有的MVC项目中都有一个/static/目录,用于存放所有静态文件。 - Shane Reustle
我只是举个例子,这并不意味着如果你正在使用MVC,你必须使用绝对路径,正如我所说,这取决于你的应用程序。 - rob waminal
这可能更多与它是CMS而不是MVC有关。在CMS中,您需要配置服务器地址,并且可能使用一个函数将该服务器地址与路径组合起来。 - Igor Zevaka
我只是举了MVC作为示例,因为它使用UrlRewriting引擎。并且大多数开发人员会将基础url添加到他们的css或js或任何其他链接的路径中,例如codeigniter。 - rob waminal
我编写MVC应用程序,如果需要,我可以使用相对路径或绝对路径。它们都能正常工作。 - Ethan

0
不确定那些具体的网站,但通常人们出于效率目的(而非个人偏好)使用不同的URL来访问静态资源文件。大多数浏览器在加载页面时对单个URL的并发连接数量有限制,通过从不同的URL提供一些文件可以绕过该限制,这需要一个绝对路径。这有助于页面更快地加载,并且是一种常见的做法。

0

除了明显的可移植性问题外,如果内容在同一域上,绝对路径并不是一个好主意,因为它可能会导致某些浏览器中进行额外的DNS查找。尽可能将域相对于您的站点根保持相对位置,这可以帮助提高性能,除非您有CDN或单独的域集来托管静态内容。

希望这可以帮到你!


0
有时候,如果代码是在服务器端运行的,可能会有一个变量打印出完整的URL。如果我没记错的话,通常在WordPress主题中,这就是它们输出正确目录的方式。

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