Вопрос по seo, iis-6, asp.net-mvc, asp.net, routing – Сайт ASP.net MVC: перенаправить все запросы «не WWW» в WWW

6

Недавно я перенес сайт ASP.net на сайт ASP.net MVC. Ранее было два заголовка узла: один mydomain.com, а другой - www.mydomain.com. Мой SEO говорит, что вы должны использовать только один URL "www.domain.com" для SEO преимущества.

Я ищу возможность сделать 301 постоянное перенаправление всех запросов mydomain.com на www.mydomain.com.

Сайт размещен в IIS6 и разработан в ASP.net MVC 4.

Ваш Ответ

4   ответа
18

Вы можете сделать это из вашего файла web.config

<system.webServer>
    <rewrite>
        <rules>
          <rule name="Redirect to WWW" stopProcessing="true">
            <match url=".*" />
            <conditions>
              <add input="{HTTP_HOST}" pattern="^example.com$" />
            </conditions>
            <action type="Redirect" url="http://www.example.com/{R:0}"
                 redirectType="Permanent" />
          </rule>
        </rules>
    </rewrite>
</system.webServer>
Это хороший ответ, @Tommy; ни строчки с # в поле зрения. Moby's Stunt Double
@MichalHosala - И это хорошо поддерживается политикой обоснования тоже. +1 за то, что выкопал, я понятия не имел. Здорово! Tommy
Вы должны использовать IIS7 или выше, чтобы использовать модуль перезаписи URL. Это путь, если у вас есть хотя бы IIS7, но он не будет работать для IIS6. Craig
@ Tommy, хотите верьте, хотите нет, за последние 2 года пришлось ввести какую-то политику, потому что я получил ошибку при сохранении своих изменений, что больше не могу использовать mydomain.com в ответе: D СмотритеВот. Michal Hosala
@johntrepreneur - для этого используется модуль перезаписи URL IIS только из файла конфигурации приложения. Если у вас есть IIS 7 и вы можете использовать этот метод, то либо проход через консоль диспетчера IIS, либо с помощью web.config должен работать аналогичным образом. Если вы используете функцию маршрутизации .NET, вам необходимо передать запрос в конвейер .NET, что может привести к небольшому снижению производительности. Я бы использовал .NET маршрутизацию только в случае невозможности использования модуля перезаписи IMHO. Tommy
0

изhttp://www.codeproject.com/Articles/87759/Redirecting-to-WWW-on-ASP-NET-and-IIS

(Аналогично вышеуказанному решению, но не требует добавления собственного доменного имени.)

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="WWW Rewrite" enabled="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" negate="true"
                            pattern="^www\.([.a-zA-Z0-9]+)$" />
                    </conditions>
                    <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}"
                        appendQueryString="true" redirectType="Permanent" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Обратите внимание, что вы, скорее всего, увидите волнистые линии под тегом с сообщением о том, что тег недействителен. Я получил это сообщение, но на самом деле оно работало просто отлично.

Если вы хотите, чтобы intellisense работал, вы можете попробовать это обновление здесь ...

http://ruslany.net/2009/08/visual-studio-xml-intellisense-for-url-rewrite-1-1/

Более подробную информацию о httpRedirect можно найти здесь ...

http://www.iis.net/configreference/system.webserver/httpredirect

0

модуль перезаписи URL не работает с IIS6 (только IIS7 или выше). Рассматривали ли вы создание собственного HttpModule, что-то вроде этого?

IIS 6 как перенаправить с http://example.com/* на http://www.example.com/*

Или вы можете использовать стороннее решение, подобное одному из следующих:

http://iirf.codeplex.com/

http://www.urlrewriting.net/149/en/home.html

http://www.isapirewrite.com/

http://urlrewriter.net/

5

но лучший метод, который я нашел, это просто поместить некоторый код вApplication_BeginRequest() в вашейglobal.asax.cs нравится:

var HOST = "www.mydomain.com";

if ( !Request.ServerVariables[ "HTTP_HOST" ].Equals(
  HOST,
  StringComparison.InvariantCultureIgnoreCase )
)
{
  Response.RedirectPermanent(
    ( HttpContext.Current.Request.IsSecureConnection ? "https://" : "http://" )
    + HOST
    + HttpContext.Current.Request.RawUrl );
}

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

я попробовал <rewrite> правило в конфигурации во всех аспектах, но не удалось в IIS 7. но это решение работает от меня. Большое спасибо. CrazyDev

Похожие вопросы