我有一个在 Visual Studio 2012 下开发的 ASP.NET Web 表单网站。有一个带有导航栏和 CSS 表链接的母版页。Bot 是使用应用程序根目录运算符“~”
<asp:PlaceHolder runat="server">
<%: Styles.Render("~/Content/themes/base/css", "~/Content/css") %>
</asp:PlaceHolder>
...
<li><a runat="server" href="~/Forms/SelectResults.aspx">Generate Table</a></li>
<li><a runat="server" href="~/BrowseDB.aspx">Browse DB</a></li>
当浏览页面时,http://localhost/Forms/SelectResults.aspx
我发现在以下情况下“~”的解析方式不同:
<link href="/Content/site.css" rel="stylesheet" type="text/css" />
...
<li><a href="SelectResults.aspx">Generate Table</a></li>
<li><a href="../BrowseDB.aspx">Browse DB</a></li>
因此,CSS 路径是绝对路径,而其他页面路径是相对路径。在本地主机上运行时,一切正常。但在将我的网站部署到服务器后,它有一个地址http://MyDomain/MySite/
,因此它不在域根目录中。而且由于绝对路径,无法加载任何 CSS 文件!导航工作正常,但所有样式都被破坏了。
为什么“~”运算符在指令中不起作用Styles.Render
? 这两个代码片段都是由标准 ASP.NET 网站模板生成的,我没有修改任何内容。
网站是在 Visual Studio 2012、.NET Framework 4.5 下开发的。我的服务器规格如下:
- Windows 7 x64
- IIS 7.5
- 网站应用程序池框架 4.0
答案1
问题是由我们的代理服务器引起的,它实际上转发http://MyDomain/MySite/
到了http://InternalDomain:InternalPort/
。并且对于该内部域,应用程序根目录实际上是站点根目录。