исправить не www пользователей на полное доменное имя www в ASP.Net MVC - PullRequest
1 голос
/ 21 мая 2009

Каков наилучший способ перенаправить пользователей сайта, которые не вводят www в доменное имя, чтобы фактически получить сайт www.

IE: я захожу на Google.com и перенаправляюсь на www.Google.com

Ответы [ 5 ]

2 голосов
/ 25 августа 2010

Если вы используете модуль перезаписи URL-адреса Microsoft IIS, то следующая запись в вашем файле web.config будет поддерживать согласованность вашего домена.

<rewrite>
            <rules>
                <rule name="Consistent Domain" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^mediapopinc.com$" />
                    </conditions>
                    <action type="Redirect" redirectType="Permanent" url="http://www.mediapopinc.com/{R:1}" />
                </rule>
            </rules>
        </rewrite>
2 голосов
/ 21 мая 2009

Самым распространенным способом решения этой проблемы является перенаправление, когда URL не соответствует ожидаемому. Обычно это делается с помощью какого-либо модуля mod_rewrite.

В ASP.NET MVC вам нужно будет перехватить входящий запрос как можно раньше в жизненном цикле запроса, проверить URL-адрес и затем перенаправить (код ответа 301 или 302) на правильный URL-адрес, если это необходимо.

Я нашел пример кода из этого поста в блоге: Канонические URL-адреса с ASP.NET MVC . Это демонстрирует один из способов достижения этого:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    if (Request.Url.Authority.StartsWith("www"))
        return;

    string url = (Request.Url.Scheme
       + "://www."
       + HttpContext.Current.Request.Url.Authority
       + HttpContext.Current.Request.Url.AbsolutePath
    );

    Response.Clear();
    Response.Status = "301 Moved Permanently";
    Response.AddHeader("Location", url);
    Response.End();
}

Для тех из нас, кто работает с Mono и Apache или использует одно из расширений mod_rewrite для IIS, вот пример mod_rewrite:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

Следуя этим советам о наличии записи A или CNAME, пользователи могут получать доступ к сайту только с обоих доменов, но это сокращает ваш Google Juice , поскольку у вас одинаковое содержание в двух разных URL.

0 голосов
/ 13 декабря 2009

Не следует игнорировать перенаправления 301. Есть хороший пост, написанный Шахед Ханом, чтобы разобраться с такой ситуацией. http://dotnetusergroup.com/blogs/shahedkhan/archive/2009/05/18/10229.aspx

0 голосов
/ 21 мая 2009

Лучше всего это обрабатывать с помощью записи A (или записи CNAME) на DNS-сервере, который управляет вашим доменом. Вы можете справиться с этим в коде, но это не совсем подходящее место.

0 голосов
/ 21 мая 2009

Если это должно быть передано правильно, это должно быть сделано как псевдоним на http-сервере, а не в вашем коде ... imo.

Поэтому, когда с сервером связываются без www, он должен просто перенаправить его на правильный URL.

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