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>