【发布时间】:2012-10-09 07:09:34
【问题描述】:
我想我会使用 base href 标签来让我的相对 URL 在不同的安装上工作。
在我的母版页中,我有:
<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" runat="server" href="css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
当我在http://localhost/myproject/default.aspx 上时效果很好,css 路径解析很好,例如:http://localhost/myproject/css/main.css
但是我有一个子文件夹,报告。当我导航到http://localhost/myproject/reports/default.aspx 并查看源代码时,我看到的是:
<base href="http://localhost/myproject/" />
<link rel="stylesheet" type="text/css" href="../css/main.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
某些东西将../ 注入到link 标记的href 属性中,这意味着它解析为:http://localhost/css/main.css 未找到。
这很奇怪,因为它的工作方式与我对脚本标签的预期一样;只是链接标签得到了这种注入。我在 IE 和 Chrome 中查看了源代码,两者都是相同的,所以我认为是 IIS/.NET 正在这样做,但它们不应该真正触及 HTML,因为它不是 runat="server"。稍微玩一下,我看到母版页上的链接标签被修改了,但脚本标签没有被修改(如果它们是没有前导“/”的相对 URL)。我认为这是因为它们是“src”属性而不是“href”属性。因此,拥有/不拥有base href 将修复一种类型,但会破坏另一种类型。
我是不是疯了,这是一个错误,还是我拿错了?
编辑:
我实际上并没有对基本标签的 href 进行硬编码。我正在写出从数据库表加载到应用程序内存的设置值。所以它实际上是在做:<base href="<%=Settings.Configuration.website_rooturl%>" /> 在我的开发机器上,该值可能是 http://localhost/ 或 http://localhost/project/,在一个客户端站点上它是 http://www.clientsite.com/ 而另一个客户端站点它是一个虚拟目录 http://www.clientsite2.com/project/。
【问题讨论】:
标签: asp.net iis href base relative-url