【问题标题】:Duplicate domain in URL or Domain/AppNameURL 或 Domain/AppName 中的域重复
【发布时间】:2016-02-05 06:57:55
【问题描述】:

我确信这是一个简单的问题,但我注意到当我托管(GoDaddy 上的共享主机)网站时,URL 会重复应用程序名称。

例如,我有http://makedifferences.org,如果我去这个很好,但如果我点击一个链接,它会把我带到http://makedifferences.org/makedifferences/...

不仅仅是这个网站,它是我在 GoDaddy 上的所有网站,我认为在我托管在其他地方的网站上可能是相同的,但我现在无法检查它们。

我没有使用 web deploy 来部署它,因为我的第一个想法是它必须做 IIS。我的猜测是它一定是发布设置中的一个设置,但我玩弄了它们,似乎无法让它消失。

任何建议将不胜感激。 谢谢, 加勒特

更新

这显然不是 mvc 问题,因为我在 dotnet-host.com 托管的网站上进行了检查,并且它没有这个问题。所以我想这与我在 Godaddy 的设置有关。

我已经删除了文件夹并设置了一个虚拟文件夹,但这并没有解决问题。

我有多个通过它们托管的站点,并且我的域名一条记录是我所有站点的专用 IP,然后在主机的域管理中,我将域名指向站点所在的文件夹。

我认为这是正确的方法,但不确定。

重申我的问题,因为我对此有所了解,如果我输入 http://makedifferences.org/Charities/Details/3 页面加载并且一切都完美。但是,如果我点击主页上的链接去那里,网址是http://makedifferences.org/makedifferences/Charities/Details/3

感谢为什么我认为这是 Visual Studio 中的设置。

【问题讨论】:

  • 你在预编译你的视图吗?
  • 不,我不是,我应该是吗?
  • 不一定。您的回答只是提供了更多信息来帮助解决问题。您可以将代码粘贴到您的主页 url 的主布局视图中吗? '
    正如 Pankaj Upadhyay 指出的那样,在共享主机中有多个虚拟文件夹是一个问题,尽管答案不多,但似乎是一个相当普遍的问题。这是来自 Godaddy 的链接support.godaddy.com/library/…

标签: asp.net-mvc-3


【解决方案1】:

有两件事会导致这种行为。

  • 您的应用程序安装在共享主机的文件夹而不是根目录中。
  • 您的 DNS 设置将域名指向此文件夹。

我想您在共享主机中托管多个网站。

要摆脱这个问题,您需要进入 IIS 设置并将这些文件夹设置为虚拟目录.....或者为每个网站创建一个....然后在该文件夹中安装您的应用程序。

更新

这实际上根本不是与 GoDaddy 共享托管相关的问题,而是在虚拟目录中托管 ASP.NET MVC 站点的问题。当您使用 GoDaddy 提供的共享主机时,您会通过虚拟目录获得一个根文件夹和无限的子文件夹,每个子文件夹都可以是自己的域。不幸的是,MVC 的路由引擎生成的 URL 将包含附加到域名的虚拟目录名称。

例如,假设您有一个名为 http://www.example.com 的域,并且您的文件夹/虚拟目录名称是 /File。如果您在不进行任何修改的情况下获取 MVC 模板项目并将其上传到您的文件夹,然后转到您的 url,一切都会很好。您会注意到页面右上角的“主页”和“关于”选项卡。当您单击“About”选项卡时,由于它被路由到 Home 控制器的 About 操作,因此您应该正确地期望 URL 是 www.example.com/Home/About。但是,您将看到 ActionLink 方法生成的 URL 包含虚拟目录的名称。因此,URL 将是 www.example.com/File/Home/About。

要解决此问题,请将以下代码添加到您的 Web.config 的 system.webServer 元素

<rewrite>
    <rules>
        <rule name="Remove Virtual Directory">
            <match url=".*" />
            <action type="Rewrite" url="{R:0}" />
        </rule>
    </rules>
</rewrite>

HERE寻求解决方案

祝你好运:-)

【讨论】:

  • 这是有道理的,我所有的网站都在自己的目录中。我已经看过虚拟目录部分,明天我会试一试,如果可行,将其标记为已回答!谢谢
  • 这看起来是正确的轨道,它没有工作,但我认为我的 Godaddy 主机上没有安装 URL 重写模块。我今天刚做完工作,明天我会告诉你的。感谢您的帮助!
  • 完美运行!不知道为什么昨天没有,但我很着急,可能没有把它放在正确的部分,
  • 我很高兴你的问题得到了解决:-)
  • 我也遇到了同样的问题,重写规则只有在我将(.net 4,iis7)应用程序池模式从经典更改为管道时才生效。
【解决方案2】:

在所有情况下我都使用了重写规则:

<rewrite>
    <rules>
        <rule name="Remove Virtual Directory">
            <match url=".*" />
            <action type="Rewrite" url="{R:0}" />
        </rule>
    </rules>
</rewrite>

下面的函数:

protected void Application_BeginRequest()
        {
            #region Godaddy shared host fix - Detect VDIR in url and remove

            //verified that HTTP_X_ORIGINAL_URL keeps the original url (withoud domain) before url rewrite module,
            //that way can check if the virtual directory name is at start, and remove it.
            if (Request.ServerVariables.AllKeys.Contains("HTTP_X_ORIGINAL_URL"))
            {
                var origUrl = Request.ServerVariables["HTTP_X_ORIGINAL_URL"];
                var matchVdir = "/" + Myproj.Core.Constants.Environment.HostingVirtualDirectoryName + "/";

                if (origUrl.StartsWith(matchVdir))
                {
                    var urlFix = Request.Url.GetLeftPart(UriPartial.Authority) + "/" + origUrl.Remove(0, matchVdir.Length);
                    Response.RedirectPermanent(urlFix);
                }
            }
            #endregion
        }

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 2021-12-30
    • 2011-01-16
    • 1970-01-01
    • 2014-07-25
    • 2017-10-22
    • 2011-02-01
    • 2013-09-25
    • 2020-09-03
    相关资源
    最近更新 更多