我想我会使用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>
某些东西已将 注入../
到标签的href
属性中link
,这意味着它正在解析为: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/
。