URLOptions - LanguageEmbedding
Link Manager GetItemURL
Features -
- Usage - Sitecore.Links.LinkManager.GetItemUrl(item)
How its rendered is controlled by a setting in site config -
<linkManager defaultProvider="sitecore"> <providers> <clear /> <add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath" shortenUrls="true" useDisplayName="false" /> </providers> </linkManager>
out-of-box Options
addAspxExtension: false | true (If you set this to false, remember to configure IIS to map all requests (*) to ASP.NET) alwaysIncludeServerUrl: false | true encodeNames: true | false languageEmbedding: asNeeded | always | never languageLocation: filePath | queryString lowercaseUrls: true | false shortenUrls: true | false useDisplayName: false | true
- LanguageEmbedding
- Always - sample url - http://<site-name>/en/some-page-url
- Never - sample url - http://<site-name>/some-page-url
- asNeeded - As defined "Sitecore includes the language in the URL if it cannot determine the context site from the incoming HTTP request, if that HTTP request does not include a cookie that specifies a language, or if the language of the linked item differs from the context language.".Since its vague, if you have to use this setting for LanguageEmbedding, then use your tenant site definition to set it to "Always" or "Never". Ref - Sitecore Dynamic link doc.pdf
- Note - if you set it to "Never" and your site is Multi-lingual, SEO will not like it as you will have same links for multiple language versions of the same page.
- Workaround -
Custom Link provider - Inherit class from
Sitecore.Links.LinkProvider
and override theGetItemUrl(...)
method.namespace Custom { public class CustomLinkProvider : Sitecore.Links.LinkProvider { public override string GetItemUrl(Sitecore.Data.Items.Item item, Sitecore.Links.UrlOptions options) { if (/* my condition of when to create custom url */) { /*generate and return custom url*/ return CustomUrlManager.GetCustomUrl(item); } /*else return the default url generated by Sitecore*/ return base.GetItemUrl(item, options); } } }
Update default Link provider
<linkManager defaultProvider="custom"> <providers> <clear /> <add name="custom" type="Custom.CustomLinkProvider, Custom" addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="always" languageLocation="filePath" shortenUrls="true" useDisplayName="false" /> <add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="never" languageLocation="filePath" shortenUrls="true" useDisplayName="false" /> </providers> </linkManager>