Sitecore добавляет номера портов ко всем URL

Интересно, видел ли кто-нибудь такое поведение раньше? Мой экземпляр Sitecore 6.6 добавляет номер порта ко всем URL-адресам, которые он генерирует для моего сайта. Так, например, ссылка на домашнюю страницу должна быть " https://example.org/", но вместо этого она генерируется как " https://example.org/". Все отлично работает с номерами портов, но это мешает кое-чему, что мы пытаемся сделать с SEO и канонизацией. Кто-нибудь знает, есть ли настройка или настройка, чтобы не производить номера портов? (Я уверен, что мог бы переписать URL-адреса, перехватывая их в соответствующей точке конвейера, но я надеюсь, что перед тем, как перейти к этому, появится более простой способ.)

4 ответа

Sitecore LinkManager это действительно не так умно. Мы также столкнулись с этой проблемой при использовании прокси-серверов и балансировщиков нагрузки. Для удаления портов мы создали кастом LinkProvider который удаляет порт при необходимости (пример непроверенного кода):

public class LinkProvider : Sitecore.Links.LinkProvider
{
   public override string GetItemUrl(Item item, UrlOptions options)
   {
      var url = base.GetItemUrl(item, options);
      if (url.StartsWith("https://"))
      {
         url = url.Replace(":443", string.Empty);
      }

      return url;
   }
}

И настроить новый LinkProvider:

<configuration xmlns:set="http://www.sitecore.net/xmlconfig/set/">
  <sitecore>
    <linkManager defaultProvider="sitecore">
      <providers>
        <add name="sitecore" set:type="Website.LinkProvider, Website" />
      </providers>
    </linkManager>
  </sitecore>
</configuration>

Это вызвано тем, что свойство 'схема' в элементе конфигурации / sitecore / sites / site в файле web.config (или исправленной конфигурации) явно установлено в значение 'http', но выполняется запросы через SSL. Удаление этого или установка "https" решает проблему.

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <sites>
      <site patch:before="*[@name='website']"
                name="my_website"
                hostName="my_website.com"
                scheme="http" 
                ...
    </sites>
  </sitecore>
</configuration>   

Это известная ошибка: https://kb.sitecore.net/articles/913585

Патч для выпусков ниже 9.1 доступен здесь: https://github.com/SitecoreSupport/Sitecore.Support.93141/releases

Я согласен с выводами Яна: установка externalPort на узле сайта в конфигурации убеждает Sitecore исключить порт в сгенерированном URL. Я сделал полную запись в своем блоге, включая использование результата для канонических тегов URL.

http://findgnosis.com/2017/06/26/hiding-port-urls-produced-sitecores-linkmanager/

LinkManager: вы можете обмануть LinkManager, добавив port="443" externalPort="80" на ваш сайт-определение в <sites>, Не знаю, если это вызовет другие проблемы, хотя.

<configuration>
  <sitecore>
    <sites>
      <site name="website" port="443" externalPort="80" />
    </sites>
  </sitecore>
</configuration>

MediaManager: если вы знаете URL, установите Media.MediaLinkServerUrl-setting, чтобы предотвратить создание Sitecore неправильный URL. Иначе...

class SslFriendlyMediaProvider : MediaProvider
{
    public override string GetMediaUrl(MediaItem item, MediaUrlOptions options)
    {
        var url = base.GetMediaUrl(item, options);

        if(options.AlwaysIncludeServerUrl)
            // https://example.com:443/a b?c=123 --> https://example.com/a%20b?c=123
            return new Uri(url).AbsoluteUri;

        return url;
    }
}

Config:

<configuration xmlns:set="http://www.sitecore.net/xmlconfig/set/">
  <sitecore>
    <mediaLibrary>
      <mediaProvider set:type="SslFriendlyMediaProvider, Assembly" />
    </mediaLibrary>
  </sitecore>
</configuration>
Другие вопросы по тегам