Как убрать www.префикс в ASP.NET MVC - PullRequest
2 голосов
/ 03 февраля 2011

Как мне убрать www. от входящих запросов? Нужно ли настраивать редирект 301 или просто переписать путь? В любом случае, как лучше это сделать?

Спасибо!

Ответы [ 6 ]

7 голосов
/ 03 февраля 2011

Я считаю, что было бы более уместно сделать это с помощью модуля перезаписи URL IIS.

Если у вас есть доступ к инструменту управления IIS, в «IIS» есть графический интерфейс для настройки правил перезаписи.раздел настроек вашего сайта.Если вы выберете «Добавить правило (ы) ...» оттуда (в правом меню столбца), выберите правило «Каноническое доменное имя» в разделе SEO, чтобы практически полностью автоматизировать настройку правила.

Если нет, то правило перезаписи будет выглядеть в вашем файле web.config:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="CanonicalHostNameRule1">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^yourdomain\.com$" negate="true" />
                </conditions>
                <action type="Redirect" url="http://yourdomain.com/{R:1}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
2 голосов
/ 15 января 2014

Вы можете использовать следующее правило перезаписи в файле web.config.

Это правило перезаписи удалит WWW, а также сохранит конечный URL и исходный протокол.

    <rewrite>
       <rules>
          <clear/>
             <rule name="Canonical host name" enabled="true">
                <match url="(.*)"/>
                <conditions trackAllCaptures="true">
                    <add input="{HTTP_HOST}" negate="false" pattern="^www\.(.+)$"/>
                    <add input="{CACHE_URL}" pattern="^(.+)://" />
                </conditions>
                <action type="Redirect" url="{C:2}://{C:1}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent"/>
             </rule>
       </rules>
    </rewrite>
2 голосов
/ 03 февраля 2011

Я нашел отличное решение здесь: http://nayyeri.net/remove-quotwwwquot-from-urls-in-asp-net

public class RemoveWWWPrefixModule : IHttpModule
{
    public void Dispose() { }

    private static Regex regex = new Regex("(http|https)://www\\.", RegexOptions.IgnoreCase | RegexOptions.Compiled);

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = sender as HttpApplication;
        Uri url = application.Context.Request.Url;
        bool hasWWW = regex.IsMatch(url.ToString());

        if (hasWWW)
        {
            String newUrl = regex.Replace(url.ToString(),
            String.Format("{0}://", url.Scheme));
            application.Context.Response.RedirectPermanent(newUrl);
        }
    }
}
2 голосов
/ 03 февраля 2011

Вы можете обработать событие Application.BeginRequest и проверить, начинается ли Request.Host с www.
. Если это произойдет, позвоните Response.RedirectPermanent и передайте URL с путем запроса и незащищенным доменом.

Вы можете создать новый URL, написав

"yourdomain.com" + Request.Url.PathAndQuery
0 голосов
/ 04 октября 2014

Гораздо проще было бы создать фильтр действий и украсить им свои действия.

public class RemovePrefix : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
                var url = filterContext.HttpContext.Request.Url.ToString().Replace("http://www.", "http://");
                filterContext.Result = new RedirectResult(url);

    }
}
0 голосов
/ 13 октября 2011

Это более общая конфигурация, поскольку вы можете записать ее один раз в перезаписи URL-адреса корневого IIS (не относится к определенному пулу приложений), и она будет автоматически применена ко ВСЕМ вашим веб-сайтам IIS без какой-либо зависимости от вашего доменного имени.

IIS Remove WWW

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...