如何检查 Sitecore 项目是否使用别名

2023-12-12

目前,Sitecore 中的“别名”会生成指向同一内容项的多个路由,这在某些情况下可能会对 SEO 产生负面影响。

我正在寻找一种方法来以编程方式检查当前页面/项目/URL/请求是否使用别名。

我希望会有类似的东西:

Sitecore.Web.WebUtil.IsAlias

关于如何检查别名有什么想法吗?

- - - -更新 - - - -

这是我当前的解决方案,看起来效果很好......除非有人有更好的想法?:

protected bool IsAlias
{
    get
    {
        string fullPath = LinkManager.GetItemUrl(Sitecore.Context.Item);
        return !HttpContext.Current.Request.RawUrl.StartsWith(fullPath, StringComparison.OrdinalIgnoreCase);
    }
}

------ 更新 2 ------

这是基于 Yan 建议的可行解决方案。我不相信 Sitecore.Context.Database.Aliases.GetTargetUrl() 从 Sitecore 6.4.1 开始工作。所以我不得不临时凑合一下。

if (Sitecore.Configuration.Settings.AliasesActive &&
    Sitecore.Context.Database.Aliases.Exists(HttpContext.Current.Request.RawUrl))
{
    const string format = "<link rel=\"canonical\" href=\"{0}://{1}{2}\"/>";
    Item targetItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Database.Aliases.GetTargetID(HttpContext.Current.Request.RawUrl));
    return String.Format(format, HttpProtocol, HttpContext.Current.Request.Url.Host, LinkManager.GetItemUrl(targetItem));
}

我们过去所做的是使用别名来设置规范网址页面头部的链接。
例如,如果您有/food别名指向/news/food当你去 /food 你会放<link href="http://[websiteurl]/news/food" rel="canonical" /> in the <head>页面的。

EDIT:

这是另一种方法

public class AliasResolver : Sitecore.Pipelines.HttpRequest.AliasResolver
{
    public override void Process(HttpRequestArgs args)
    {
        base.Process(args);

        if (Context.Item != null)
        {
            args.Context.Items["CanonicalUrl"] = Context.Item.GetFullUrl(args.Context.Request.Url);
        }
    }
}

然后在你的标题控件中你需要做的就是检查是否HttpContext.Current.Items["CanonicalUrl"]设置并显示它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查 Sitecore 项目是否使用别名 的相关文章

  • 如何在 中继器中查找控件

    我有这个源代码 div div
  • 带有 CosmosDBTrigger 的 Azure 函数似乎不是由 upsert 触发的

    我是第一次使用 Azure Functions 我正在尝试编写一个简单的函数来响应更改或添加到 CosmosDb 集合中的文档 我写的函数如下所示 FunctionName ChangeLog public static void Run
  • 在 ASP.NET Core 中使用防伪功能并出现错误 - 防伪令牌无法解密

    我的 ASP Net Core MVC 应用程序已添加防伪中间件如下 启动 cs services AddMvc services AddSession services AddCaching services AddSession o g
  • asp.net 检查 imageURL 是否存在

    我正在尝试从另一个 Intranet 站点获取用户的缩略图 但其中一些不遵循预定义的格式 这意味着我想加载默认的缩略图 检查图像 URL 是否有效的最佳方法是什么 根据您获取图像的方式 此方法的变体可能会起作用 img src alt My
  • 如何在 JavaScript 中检查 IsPostBack? [复制]

    这个问题在这里已经有答案了 我需要运行 JavaScript 函数 onLoad 但仅在页面第一次加载时才执行 即不是回发的结果 基本上 我需要检查 JavaScript 中的 IsPostBack 谢谢 服务器端 写 if IsPostB
  • 将base64字符串转换为图像c#时出错

    我想在我的网页上显示图像 并单击应该下载的链接按钮 存储的图像文件以二进制格式存储在db中 将 base64 字符串转换为图像时显示错误 详细信息如下 帮助我找到合适的解决方案 谢谢 Error Code protected void Pa
  • 实体框架中对象属性中的 NULL 值

    Tables Article Author Comment 1篇文章和1位作者可以有 评论 数据库中有 1 篇文章 1 位作者和 1 条评论 问题是 该代码 myBD my bd new myBD var articles by bd Ar
  • 如何在2.0构建的应用程序中使用WCF wsHttpBinding服务?

    WCF 服务正在使用 wsHttpBinding 绑定运行 将使用 WCF 服务的应用程序不符合 WCF 或者换句话说 它位于 Framework 2 0 之上 我无法在此应用程序中使用 ServiceModel 因为只有 3 5 支持 S
  • 使用 '<%# Eval("item") %>';处理空值并显示 0

    如果数据项是Null我想展示0
  • UserControl 中的 Web 控件为空?

    我构建了一个小型用户控件 它本质上是一个 DropDownList 其中包含一些基于目标属性设置的预设值 这是代码 public partial class Selector System Web UI UserControl public
  • ADO.NET 池连接无法重用

    我正在开发一个 ASP NET MVC 应用程序 该应用程序使用 EF 6 x 来处理我的 Azure SDL 数据库 最近 随着负载的增加 应用程序开始进入无法再与 SQL 服务器通信的状态 我可以看到有 100 个到我的数据库的活动连接
  • 如何从 GridView TemplateColumn 单击触发 UpdatePanel?

    我有以下情况 我的所有控件都在页面上的更新面板上 这些控件之一是 GridView 该 GridView 在标题模板字段上包含一个复选框 以进行全部选中 autopostback 是 true 但是当检查更改时 没有任何更改 更新面板会触发
  • 如何通过ConfigurationManager找到配置文件位置?

    如何通过ConfigurationManager找到配置文件位置 我在代码中有 ConfigurationManager 类 并且正在调试它 我想知道它指向哪个配置文件 web config 或 app config 等 Configura
  • 如何在 Facebook 应用程序中关闭“使用严格模式重定向 URI”

    有什么办法可以关闭该选项Use Strict Mode for Redirect URIs在 Facebook 应用程序中 自 2018 年 3 月起 此属性似乎已自动打开并呈灰色显示 因此无法禁用 Facebook 似乎不允许身份验证 除
  • nHibernate 使用 Log4Net 进行日志记录,线程会话问题

    大家好 这里有一个小问题 我正在努力解决这个问题 我目前正在开始使用 nHibernate 由于工作需要 我不得不这样做 并且我在 nHibernate 的会话和多线程方面遇到了一些困难 我想在这里完成的任务是让 Log4Net 将所有内容
  • UpdatePanel 破坏 JQuery 脚本

    这是我想做的事情的简化版本 基本上我有一个数据列表 里面有很多东西 当你将鼠标悬停在数据列表中的项目上时 我希望 jquery 隐藏 显示东西 问题是 在我进行数据绑定后 如果 gridview repeater datalist 位于更新
  • OData 实体属性序列化名称与 C# 变量名称不同

    在使用 OData 的 ASP NET Web API 中 我有一个 C 对象 描述允许在 filter 中使用的字段 说我想限制 filter支持仅 filter deviceId gt someValue 随后http www ben
  • 哈希密码如何解密? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在我的网站中使用盐技术的 SHA1 算法对密码进行哈希处理 有什么办法可以解密密码并恢复原来的密码吗 Hashing不加密 解密 当我们
  • 将 aspx 文件加载到 xmldocument 中

    我希望能够将 aspx 页面加载到 XmlDocument 变量中 我怎么做 这是我尝试过的 它期望 xml 文件而不是 aspx 页面 有没有办法将aspx页面即时转换为xml文档并加载它 谢谢 string filePath C Web
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多

随机推荐

  • 在插入查询中动态选择列名

    收到错误列名 ColumnNames 无效 在最后一行 插入子句 知道为什么吗 Declare ColumnNames varchar 2000 Declare OrderId int set OrderId 110077 select C
  • Android studio logcat 窗口日志级别过滤器丢失

    我的打印屏幕 我不知道如何解决它 即使我尝试过解决这些问题 类似问题1 类似问题2我的android studio版本是2021 3 1 这就是New Logcat 更新 海豚 如果你想放置级别过滤器那么你只需要写level error l
  • 以编程方式设置 Android IP、DNS、GATEWAY 设置

    如何从 android java 设置 wifi ip 地址 dns 地址 网关 即以编程方式设置 我没有找到任何能够存储这些值的方法 您可以通过编程方式更改系统设置 首先 您需要在 AndroidManifest xml 中请求 WRIT
  • 捕获 iframe 的屏幕截图 - html2canvas 不起作用

    我有以下 iframe 我只是想捕获 iframe 内容的屏幕截图 我已经尝试过 html2canvas 但它似乎不起作用 我尝试过将 iframe 放入 div 中 但没有任何乐趣 我见过使用 php 实现此目的的各种方法 但似乎没有什么
  • 用多字符字符串替换字符

    我正在尝试替换德语和荷兰语变音符号 例如 or 它们应该写成ae代替 所以我不能简单地将一个字符翻译成另一个字符 有没有更优雅的方法来做到这一点 实际上它看起来像这样 尚未完成 SELECT addr REPLACE REPLACE add
  • Android:如何获取文件的创建日期?

    这是我的代码 File TempFiles new File Tempfilepath if TempFiles exists String child TempFiles list for int i 0 i lt child lengt
  • git分支可以用数字列出吗?

    我想知道是否有人构建了一个脚本或有办法列出带有数字的 git 分支 以便代替这个 最好在 bash 中 feature myusername ID 1111 my branch name feature myusername ID 2222
  • django:控制json序列化

    有没有办法在django中控制json序列化 下面的简单代码将返回 json 中的序列化对象 co Collection objects all c serializers serialize json co json 将类似于以下内容 p
  • Git 中的子模块、子树或其他依赖项?

    我有一个较大的项目 其中有很多模块 库及其各自的存储库 这些模块中的大多数是其他模块的依赖项 而不是项目的依赖项 现在已经到了主项目有多个子项目并且许多模块被共享的地步 有些依赖关系的深度超过 3 4 层 我读过可以在项目内部更新 拉取子模
  • 调用 async fns 时创建值流?

    我不知道如何提供Stream我在哪里await异步函数来获取流值所需的数据 我尝试过实施Stream直接使用特质 但我遇到了问题 因为我想使用异步的东西 比如awaiting 编译器不希望我调用异步函数 我认为我缺少一些关于目标的背景知识S
  • 使用 Apache (.htaccess) 将 WWW 转换为非 WWW URL(删除 WWW)

    我必须将我的网站从https www example com to https website com SSL已正确安装在我的服务器上 我在用Apache并且必须使用来做到这一点Apache 任何一个httpd conf ssl conf
  • 如何使用Python的pip下载并保存包的压缩文件?

    如果我想使用pip命令下载包 及其依赖项 但是keep下载的所有压缩文件 例如 django socialregistration tar gz 有办法做到这一点吗 我尝试过各种命令行选项 但它似乎总是解压并deletezipfile 或者
  • cocoapods - “pod 安装”需要很长时间

    我试图用以下命令更新现有的 Podpod install命令 但需要永远运行 详细模式显示它卡在下一行 永远 更新规范存储库master usr bin git pull no rebase no commit 卡住后没有网络活动 我遇到了
  • AppWidgetProvider问题

    我有一个 AppWidgetProvider 当小部件首次添加到主屏幕时 我需要进行一些初始化 据我所知 执行此操作的位置是在 onEnabled Context context 方法中 我的问题是这个方法永远不会被调用 据我在 logca
  • C++ 库包含

    我对 C 比较陌生 第一次需要使用库 我希望有人能够向我展示如何正确地 链接到 包含 该库 我想使用的库是 ID3 v3 8 8 可以在这里找到 http id3lib sourceforge net 我已经下载了 Windows 二进制文
  • Java SystemV 时区和 JodaTime

    我正在使用 Joda Time 在 Java 应用程序中处理时区 我在尝试从 java 时区的 id 构建 DateTimeZone Joda Time 对象时遇到问题 乔达扔出一个 java lang IllegalArgumentExc
  • 将 UTC 日期时间全局转换为用户指定的本地日期时间

    我将所有 DateTime 字段存储为 UTC 时间 当用户请求网页时 我想采用他的首选本地时区 而不是服务器计算机的本地时区 并自动将所有 Web 表单中的所有日期时间字段显示为本地日期 当然 我可以在每种表单中的每个 DateTime
  • 具有特定产品标签的 WooCommerce 产品的批量动态定价

    我正在尝试为所有具有标签的产品添加动态折扣 批量折扣 我希望如果客户购买例如 就会发生折扣 5 个带有标签的相似或不同产品 我正在与this代码 和this回答 这就是我所拥有的 add action woocommerce before
  • Android Gingerbread 之后 Async Task 到底发生了什么变化?

    Android 2 3 之后 Android 团队在异步任务中真正做了哪些改变 当我执行以下代码时 我在 Android 2 3 和 3 0 中得到相同的结果 package com sample asynctask import andr
  • 如何检查 Sitecore 项目是否使用别名

    目前 Sitecore 中的 别名 会生成指向同一内容项的多个路由 这在某些情况下可能会对 SEO 产生负面影响 我正在寻找一种方法来以编程方式检查当前页面 项目 URL 请求是否使用别名 我希望会有类似的东西 Sitecore Web W