指引网

当前位置: 主页 > 网页制作 > WEB开发 >

html中base标签解决相对路径问题

来源:网络 作者:佚名 点击: 时间:2017-07-19 00:36
[摘要] 问题是门户系统一直使用的是相对路径,首页做了rewrite,而首页的很多链接(包括css、js、图片等)都是相对路径,问了门户系统那边的没法解决,只能用相对路径。 杯具来了,href=news/2014/05/2

问题是门户系统一直使用的是相对路径,首页做了rewrite,而首页的很多链接(包括css、js、图片等)都是相对路径,问了门户系统那边的没法解决,只能用相对路径。

杯具来了,href="news/2014/05/25/1234.html"类似这样的链接都成了http://www.111cn.net /news/2014/05/25/1234.html的全路径,而这个路径在nginx中是没法识别成门户系统的(nginx是通过/portal来匹配的)。
这是因为:HTML文档所有链接中的相对路径,浏览器都会提取当前文档的URL来填充。
突然想起了HTML的base标签,来看W3C的解释:


<base> 标签为页面上的所有链接规定默认地址或默认目标。
 
通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。
 
使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。
 
注释:<base> 标签必须位于 head 元素内部。
`(*∩_∩*)′尝试一下,在head标签中加入base标签
?

实例

 代码如下 复制代码

<head>
<base href="http://www.w3school.com.cn/i/" />
<base target="_blank" />
</head>

<body>
<img src="eg_smile.gif" />
<a href="http://www.w3school.com.cn">W3School</a>
</body>

问题果然解决!

注:文中使用的域名和路径非真实场景中的域名和路径。

一个BUG

base标签最好不要动态写入,否则在Firefox和IE中会有一个小bug,比如对于页面http://localhost/static/test.html:

 

 代码如下 复制代码
<html>
<head>
<script>
document.write('<base href="http://localhost/" />');
</script>
</head></p> <p><body>
<img src="static/1.jpg" />
</body>
</html>

Firefox和IE中会先加载http://localhost/static/static/1.jpg,然后再加载http://localhost/static/1.jpg。也就是说,他们都先尝试用相对于当前页面的路径进行加载,然后再通过base标签设置的默认路径加载。

------分隔线----------------------------