6

想知道是否有人以前见过这种行为。我的 Sitecore 6.6 实例将端口号附加到它为我的站点生成的所有 URL。例如,指向主页的链接应该是“ https://example.org ”,但生成的却是“ https://example.org:443 ”。端口号一切正常,但它混淆了我们试图用 SEO 和规范化做的一些事情。有谁知道是否有不产生端口号的设置或设置?(我确信我可以通过在管道中的适当位置捕获它们来重写 URL,但我希望在跳转之前有一种更简单的方法。)

4

5 回答 5

7

SitecoreLinkManager确实没那么聪明。我们在混合使用代理服务器和负载平衡器时也遇到了这个问题。为了删除端口,我们创建了一个自定义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>
于 2015-09-15T10:59:42.473 回答
3

这是由于将 web.config(或修补配置)的 configuration/sitecore/sites/site 元素中的“scheme”属性显式设置为“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>   
于 2016-04-06T14:59:48.283 回答
2

这是一个已知的错误: https ://kb.sitecore.net/articles/913585

这里有一个低于 9.1 版本的补丁: https ://github.com/SitecoreSupport/Sitecore.Support.93141/releases

于 2019-04-18T14:55:43.437 回答
1

我同意 Jan 的发现:在配置中的站点节点上设置externalPort可以使 Sitecore 在生成的 URL 中排除该端口。我在我的博客上写了一篇完整的文章,包括使用规范 URL 标签的结果。

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

于 2017-06-27T19:44:22.040 回答
0

LinkManager: 您可以通过添加port="443" externalPort="80"到您的站点定义中来欺骗 LinkManager <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;
    }
}

配置:

<configuration xmlns:set="http://www.sitecore.net/xmlconfig/set/">
  <sitecore>
    <mediaLibrary>
      <mediaProvider set:type="SslFriendlyMediaProvider, Assembly" />
    </mediaLibrary>
  </sitecore>
</configuration>
于 2017-06-13T12:46:13.140 回答