母版页编辑和绝对URL

时间:2009-04-01 09:26:03

标签: asp.net dns master-pages

更新03/04/09

在回复一些评论时,母版页中的示例如下所示。这不是一个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条目,指向同一网站。

更新02/04/09

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

开头

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

原始问题

我有一个ASP.Net 2.0应用程序,它有几个母版页。这基本上是模仿我们的主要网站,但因为它在不同的服务器上运行所有菜单项的URL等都给我们主站点的绝对URL。

这在我的开发机器上工作正常,但在生产服务器上,所有绝对的URL在运行时都会发生变化,但在点击时它们仍会在同一页面上结束。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

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

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

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

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

希望这有帮助。

答案 1 :(得分:0)

“绝对”我认为你的意思是他们以“/”而不是文件夹名称开头?

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

修改评论

您能举例说明网址的更改方式吗?即从http://www.example.com/ somepage.aspx http://www.example.com/ trackingpage.aspx?somequerysting - 或者域名是否在变化?或其他什么?

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

您是否正在使用在PreRender或Render中执行其他步骤的自定义基页,这些步骤与正在更改URL的开发者计算机的生产有所不同?