【问题标题】:Master Page compilation and Absolute URLs母版页编译和绝对 URL
【发布时间】:2009-04-01 09:26:02
【问题描述】:

2009 年 3 月 4 日更新

针对某些 cmets,母版页中的示例如下所示。这不是asp.net控件,这是硬编码的html

<a href="http://www.MYDOMAIN.com/about_us.asp" accesskey="u"><span class="topleft"><span class="bottomleft">About us</span></span></a>

这在生产服务器上呈现为

<a href="http://www.NEWDOMAIN.com/about_us.asp" accesskey="u"><span class="topleft"><span class="bottomleft">About us</span></span></a>

MYDOMAIN 是我们主站点的真实域名,NEWDOMAIN 是指向同一站点的完全有效的 DNS 条目。

2009 年 2 月 4 日更新

所有的 URL 都是绝对的,因为它们以 http:// 开头

我不认为这可能是浏览器问题,因为实际呈现的源代码(通过查看源代码查看)已更改。检查了 IE7/8 和 Firefox 3 并见证了相同的行为。

原始问题

我有一个 ASP.Net 2.0 应用程序,它有几个母版页。这基本上被模拟成看起来与我们的主网站完全一样,但是因为它在不同的服务器上运行,所以菜单项等的所有 URL 都被赋予了我们主站点的绝对 URL。

这在我的开发机器上运行良好,但在生产服务器上,所有绝对 URL 在运行时都会发生变化,但单击时它们仍然会出现在相同的页面上。

这是 DNS 问题吗?当母版页和内容合并时,ASP.Net 是否会对 URL 进行一些 DNS 解析?如果是这样,为什么它在我的本地机器上没有相同的效果,它们在同一个域上。

【问题讨论】:

  • 你能粘贴正在更改的超链接的来源吗?
  • 确实——你能给我们举个例子说明如何更改网址吗?
  • 谢谢各位,源代码已按要求发布。

标签: asp.net dns master-pages


【解决方案1】:

不,这不是 DNS 问题,ASP.net 不进行任何 DNS 解析。这是您查看页面的浏览器的全部责任。

但是,有几种情况会导致页面标记中提供的 URL 不一致,客户端的浏览器可能会对此做出不同的解释。

浏览器将始终以相同的方式解释以“http://”开头的 URL - 它是一个绝对 URL,因此目标将始终解析为相同的内容。确保所有指向主站点的 URL 都以“http://”开头。

以“www”开头的网址。 (没有 http://)将被视为相对 URL - 即,如果包含 URL 的页面位于 http://www.google.com,那么您实际上是在请求 http://www.google.com/YourUrl。您会发现这几乎肯定不是您要寻找的行为。

以斜杠 (/) 开头的 URL 在当前域中将被视为绝对 URL。例如,Google 中的“/Tools”会导致对“http://www.google.com/Tools”的请求。如果没有前导斜杠,浏览器会将 URL 视为相对于当前正在查看的页面(即,当您查看“en”文件夹中的页面时,“Tools”的 URL 将导致请求“en /工具”。

我认为这是您的问题出现的地方。对于一致的行为,我发现确保所有 URL 都以斜杠开头是一个很好的经验法则。如果您想确保您的 ASP 代码生成的所有超链接都是正确的,请使用波浪号(ASP 将替换为应用程序根文件夹的路径):

<asp:Hyperlink id="Test1" runat="server" NavigateUrl="~/Tools/Default.aspx">Tools</asp:Hyperlink>

这样,无论您使用 Cassini、IIS 中的网站还是 IIS 中的虚拟目录,您的页面在站点结构中的哪个位置都无关紧要 - URL 将始终解析为正确的地址。

如果要输出不是服务器控件属性的 URL,请使用 ResolveUrl 方法:

<a href="<%= ResolveUrl("~/Tools/Default.aspx")%>">Tools</a>

希望这会有所帮助。

【讨论】:

  • 这是一个非常完整的响应 (+1),但所有这些 URL 都以 http:// 开头,这是您所能获得的绝对值(或者我认为如此)。但是在生产服务器上,这些正在更改。
【解决方案2】:

“绝对”我假设您的意思是它们以“/”而不是文件夹名称开头?

如果您使用的是 ASP.NET hyperlink 控件,则这些控件往往会被修改为从应用程序根目录开始。

编辑评论

您能否举例说明如何更改网址?即从 http://www.example.com/somepage.aspxhttp://www.example.com/trackingpage.aspx?somequerysting - 还是域发生了变化?还是别的什么?

您说“他们仍然在相同的页面上” - 很明显,事情正在发挥作用。您是否在生产服务器上的 web.config 中注册了任何 HttpHandler,它们可以为您修改 URL,以便它们都通过一些日志记录系统? IE。从服务器获取响应,处理生成的 HTML,修改所有链接 - 是否使用简单的锚标记以及超链接控件发生?

您使用的是在 PreRender 中执行额外步骤的自定义基本页面,还是在生产环境中与正在更改 URL 的开发人员机器不同的 Render?

【讨论】:

  • 不是绝对的,我的意思是绝对的,“/”仍然是相对的。这些链接都以“http://”开头
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多