Как перенаправить все через Web.config или C # на https://www. версию сайта? - PullRequest
3 голосов
/ 15 февраля 2011

У меня есть сайт ASP.NET, размещенный на GoDaddy.Мне нужно перенаправить (301) каждый запрос на https://www.example.com/whatever

Так, например:

Это кусок пирога в Linuxили хостинги cPanel.Но я не знаю, как это сделать на GoDaddy (я попросил поддержки, но они, похоже, ничего не знают ...).Я думаю, что это легко сделать с IIS, но GoDaddy не дает вам доступ к IIS.

Так есть ли способ сделать это через Web.config или C #?Предпочтительно web.config

Ответы [ 2 ]

5 голосов
/ 15 февраля 2011

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

Выпуск постоянных перенаправлений из ASP.NET

Вы можете проверить входящий URL-адрес для каждого запроса в обработчике событий Application_BeginRequest вашего файла Global.asax.Если в URL отсутствует начальный www., вы можете добавить его и сделать постоянное перенаправление на новый URL.

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

   var url = string.Format("{0}://www.{1}{2}",
               Request.Url.Scheme,
               Request.Url.Authority,
               Request.Url.PathAndQuery);

   Response.RedirectPermanent(url, true);
} 

Перезапись URL-адресов в каноническую форму с помощью модуля перезаписи URL-адреса IIS 7

Если на вашем веб-сайте установлены IIS7 и Microsoft Модуль перезаписи URL , вы можете добавить правила перезаписи в файл Web.config.У меня нет сайтов, размещенных на GoDaddy, поэтому я понятия не имею, используют ли они IIS7 (я думаю, что они используют) или если у них установлен модуль перезаписи URL.Обратитесь в службу поддержки.

Предполагая, что эти предварительные условия выполнены, вы должны использовать следующую конфигурацию:

<configuration>
   ...

   <system.webServer>
      <rewrite>
         <rules>
            <rule name="Canonical Host Name" stopProcessing="true">
               <match url="(.*)" />

               <conditions>
                  <add input="{HTTP_HOST}" pattern="^yoursite\.com$" />
               </conditions>

               <action type="Redirect" url="http://www.yoursite.com/{R:1}" redirectType="Permanent" />
            </rule>
         </rules>
      </rewrite>
   </system.webServer>
</configuration>

Перезапись через стороннее приложение

Многие веб-хостинговые компании имеютустановлено стороннее приложение для перезаписи URL, такое как ISAPI_Rewrite.Я не знаю, есть ли у GoDaddy это, вам нужно проверить с поддержкой.Но это может быть другой вариант.

Рассказывая поисковым системам вашу каноническую форму в разметке

Вместо того, чтобы беспокоиться о перенаправлении пользователей на www. версию, вы можете просто позволить пользователям зайти на ваш сайт.как бы они этого ни хотели, но добавьте разметку на свою страницу, чтобы сообщить поисковым системам каноническую форму ваших URL.

Чтобы указать канонический URL, просто добавьте элемент <link> в часть <head> сети.стр.Это работает следующим образом: добавьте следующую разметку в разделы <head> на тех страницах вашего веб-сайта, чтобы поисковые системы рассматривали один и тот же URL:

<link rel="canonical" href="canonical_url" /> 

Если вы выполнитеView / Source на Stackoverflow.com вы увидите этот тег <link> на месте.Это отличный способ убедиться, что дубликаты URL на вашем сайте - например, www.yoursite.com/foo.aspx и yoursite.com/foo.aspx рассматриваются как одна и та же запись в индексе поисковой системы.

Счастливого программирования!

1 голос
/ 11 июля 2011

Спасибо Скотту за отличный ответ! Это было очень полезно.

Вот мод для кода Application_BeginRequest (), который 1) использует порядковые сравнения строк для скорости, 2) учитывает localhost и 3) выделяет асимметричный побочный эффект.

protected void Application_BeginRequest(object sender, EventArgs e)
{
    /**
     *  Note:
     *    Since Url.Authority always returns an all lowercase string, we can use 
     *    StringComparison.Ordinal (instead of OrdinalIgnoreCase) for www and 
     *    localhost checks.
     *  
     *  Ordinal rationale:
     *    "Use comparisons with StringComparison.Ordinal or 
     *    StringComparison.OrdinalIgnoreCase for better performance"
     *    see http://msdn.microsoft.com/en-us/library/dd465121.aspx#choosing_a_stringcomparison_member_for_your_method_call
     */
    if (Request.Url.Authority.StartsWith("www", StringComparison.Ordinal))
        return;

    /**
     * Avoid redirection on localhost.
     */
    if (Request.Url.Authority.StartsWith("localhost", StringComparison.Ordinal))
        return;

    /**
     * Because Uri.Authority is always lowercase, this code has the side-effect of 
     * enforcing a lowercase authority (e.g., http://NoisyKeys.com/About is 
     * converted to http://www.noisykeys.com/About).  This is asymmetric with 
     * previous conditionals.  To attain symmetry, we probably want to use 
     * Request.Url.OriginalString instead of Request.Url.Authority.
     */
    var url = string.Format("{0}://www.{1}{2}", 
        Request.Url.Scheme,
        Request.Url.Authority,
        Request.Url.PathAndQuery);

    Response.RedirectPermanent(url, true);
}
...