Повторяющийся домен в URL или домене / AppName - PullRequest
4 голосов
/ 22 января 2012

Я уверен, что это простая проблема, но я заметил, что когда я размещаю (общий хост на GoDaddy) веб-сайт, URL повторяет имя приложения.

Например, у меня есть http://makedifferences.org,, если я пойду на это нормально, но если я нажму на ссылку, я получу http://makedifferences.org/makedifferences/...

Это не просто один сайт, это все мои сайты на GoDaddy, и я думаю, что это может быть то же самое на моих сайтах, размещенных в других местах, но я не могу проверить их обряд сейчас.

Я не использую веб-развертывание для его развертывания, так как я сначала подумал, что это должен был сделать IIS. Я предполагаю, что это должна быть настройка в настройках публикации, но я поиграл с ними и никак не мог заставить ее уйти.

Любой совет будет оценен. Спасибо, Garrett

Обновление

По-видимому, это не mvc, поскольку я проверяю сайт, который я разместил на dotnet-host.com, и у него нет этой проблемы. Так что я думаю, это что-то с моими настройками в Godaddy.

Я удалил папку и настроил виртуальную папку, но это не решило проблему.

У меня есть хостинг на нескольких сайтах и ​​мое доменное имя. Запись - это мой выделенный IP-адрес для всех сайтов, затем в управлении доменом хоста я указываю доменное имя на папку, в которой находится сайт.

Я думаю, что это правильный способ сделать это, но я не уверен.

Чтобы переформулировать мою проблему теперь, когда я знаю немного больше об этом, , если я наберу http://makedifferences.org/Charities/Details/3, страница загрузится и все будет идеально. Но если я нажму ссылку на главной странице, чтобы перейти туда, URL будет http://makedifferences.org/makedifferences/Charities/Details/3

Спасибо, почему я думал, что это настройка в Visual Studio.

Ответы [ 2 ]

5 голосов
/ 22 января 2012

Есть две вещи, которые вызывают это поведение.

  • Ваше приложение установлено в папке вместо корневого каталога для общего хостинга.
  • Ваши настройки DNS указывают доменное имя на эту папку.

Я полагаю, вы размещаете мульти-сайты в виртуальном хостинге.

Чтобы избавиться от этой проблемы, вам нужно зайти в настройки IIS и установить эти папки как виртуальные каталоги ..... Или создать по одной для каждого веб-сайта .... А затем установить приложение в эту папку.

UPDATE

На самом деле это вообще не проблема общего хостинга GoDaddy, а проблема с размещением сайта ASP.NET MVC в виртуальном каталоге. При использовании общего хостинга, предоставляемого GoDaddy, вы получаете корневую папку и неограниченные подпапки, каждая из которых может быть своим собственным доменом, в виде виртуального каталога. К сожалению, механизм маршрутизации MVC создает URL-адреса, которые будут включать имя виртуального каталога, добавляемое к имени домена.

Например, допустим, у вас есть домен с именем http://www.example.com и ваша папка / имя виртуального каталога - / File. Если вы возьмете шаблонный проект MVC без внесения каких-либо изменений и загрузите его в свою папку, а затем перейдете на свой URL-адрес, все будет хорошо выглядеть. Вы увидите вкладки «Домой» и «О нас» в правом верхнем углу страницы. Когда вы нажимаете на вкладку «О программе», так как она перенаправляется на действие «О программе» на домашнем контроллере, вы вправе ожидать, что URL будет www.example.com/Home/About. Однако вы увидите, что URL-адрес, созданный методом ActionLink, содержит имя виртуального каталога. Поэтому URL будет www.example.com/File/Home/About.

Чтобы избавиться от этой проблемы, добавьте следующий код в ваш Web.config's system.webServer элемент

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

Решение ищется от ЗДЕСЬ

Удачи: -)

1 голос
/ 05 февраля 2016

Для работы во всех случаях я использовал правило перезаписи:

<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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...