我有一个用IIS7托管的ASP .NET MVC 5项目。
在产品页面中,我有以下代码:
<a href="www.domain.com"> blabla </a>
它托管在domainx或ipx上。现在,当我浏览网站并将鼠标悬停在网址上时,它显示我将访问www.domainx.com/www.domain.com。如果我使用IP它是相同的东西,而是它使用IP前缀url。
造成这种情况的原因和/或如何阻止/阻止它发生?
答案 0 :(得分:2)
我在示例项目中使用SO作为索引页面上的锚点超链接(Views / Home / Index.cshtml)重现了您的问题,将http://
协议更改为仅www:
<a href="www.stackoverflow.com">Stack Overflow</a>
令人惊讶的是,当悬停在写为[IP address]/www.stackoverflow.com
或[domain name]/www.stackoverflow.com
的锚链接上时,在索引页面上生成的网址。
但是,如果在不使用www前缀的情况下添加http://
协议,则会使用绝对路径来更正SO URL。
我得出结论,不是仅使用www前缀,而是在绝对URL路径上指定http协议:
<a href="http://www.domain.com"> blabla </a>
或者如果您想创建站点根超级链接,请使用Html.ActionLink
,如下所示:
@Html.ActionLink("blabla", "Index", "Home")
或使用普通锚标记:
<a href="@Url.Action("Index", "Home")">blabla</a>
恕我直言,如果未指定URL协议,Razor视图引擎可以将锚标记的href
属性中的URL字符串视为站点根IP /域下的控制器名称,因此需要HTTP前缀来区分控制器名称和外部绝对URL路径。
欢迎任何建议。