Удаление «ядра сайта/контента» из URL-адресов: подробное руководство

Метод 1: использование веб-API элементов Sitecore
Веб-API элементов Sitecore обеспечивает программный доступ к элементам Sitecore. Мы можем использовать этот API, чтобы получить путь к элементу и создать чистый URL-адрес без сегмента «sitecore/content».

string itemId = "{Item ID}";
Item item = Sitecore.Context.Database.GetItem(itemId);
string cleanUrl = item.Paths.Path.Substring(10); // Removes "sitecore/content" from the path

Метод 2: преобразователь настраиваемых элементов
Настраиваемый преобразователь элементов перехватывает конвейер обработки URL-адресов и изменяет запрошенный URL-адрес. Внедрив специальный преобразователь элементов, мы можем удалить сегмент «sitecore/content» из URL-адресов.

public class CustomItemResolver : HttpRequestProcessor
{
    public override void Process(HttpRequestArgs args)
    {
        string requestedUrl = args.Url.ItemPath;
        if (requestedUrl.StartsWith("/sitecore/content"))
        {
            args.Url.ItemPath = requestedUrl.Substring(17); // Removes "sitecore/content" from the URL
        }
    }
}

Метод 3: Модуль перезаписи URL-адресов
Модуль перезаписи URL-адресов позволяет определять правила перезаписи URL-адресов. Мы можем создать правило для удаления сегмента «sitecore/content» из URL-адресов с помощью регулярных выражений.

<rewrite>
  <rules>
    <rule name="RemoveSitecoreContent" stopProcessing="true">
      <match url="^sitecore/content/(.*)$" />
      <action type="Rewrite" url="{R:1}" />
    </rule>
  </rules>
</rewrite>

Метод 4: настройка Sitecore LinkManager
LinkManager Sitecore обеспечивает контроль над созданием URL-адресов. Настроив LinkManager, мы можем настроить сгенерированные URL-адреса и удалить сегмент «ядро сайта/контент».

<configuration>
  <sitecore>
    <linkManager>
      <providers>
        <add name="sitecore">
          <patch:attribute name="generateUrlsWithLanguageEmbedding">false</patch:attribute>
          <patch:attribute name="alwaysIncludeServerUrl">false</patch:attribute>
          <patch:attribute name="encodeNames">true</patch:attribute>
          <patch:attribute name="useDisplayName">false</patch:attribute>
          <patch:attribute name="shortenUrls">true</patch:attribute>
          <patch:attribute name="addAspxExtension">false</patch:attribute>
          <patch:attribute name="lowercaseUrls">true</patch:attribute>
          <patch:attribute name="useItemLanguage">false</patch:attribute>
          <patch:attribute name="removeSitecoreContent">true</patch:attribute>
        </add>
      </providers>
    </linkManager>
  </sitecore>
</configuration>