【问题标题】:Sitecore adding port numbers to all URLsSitecore 将端口号添加到所有 URL
【发布时间】:2015-12-10 14:36:34
【问题描述】:

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

【问题讨论】:

  • 您确定在 IIS 中为该站点选择了 https 绑定吗?
  • 还可以考虑查看这个 SO 问题stackoverflow.com/questions/17273492/…
  • 您是否将端口添加到配置中的<site> 定义?如果是这样,那就是为什么,链接管理器不是很聪明!

标签: url sitecore port-number


【解决方案1】:

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>

【讨论】:

    【解决方案2】:

    这是由于将 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>   
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 我认为这可能是对 Jan 答案的支持和评论。
        • 此外部链接不再有效。说域名已经过期。请更新您的评论。
        • 这是什么版本的?它似乎在 8.1 中不起作用,它似乎只理解“端口”属性。
        【解决方案5】:

        链接管理器: 您可以通过在&lt;sites&gt; 的站点定义中添加port="443" externalPort="80" 来欺骗LinkManager。不知道这是否会导致其他问题。

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

        媒体管理器: 如果您知道 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-12-29
          • 1970-01-01
          • 2018-12-09
          • 2012-11-11
          • 2019-07-19
          • 1970-01-01
          • 2017-01-06
          • 2011-01-14
          • 1970-01-01
          相关资源
          最近更新 更多