安装
先确保你有一个 Aposrope项目来啊!
然后说:
npm install @apostrophecms/redirect
配置
单位 app.js,在配置中添加模块:
require('apostrophe')({
shortName: 'MYPROJECT',
modules: {
'@apostrophecms/redirect': {}
}
});
statusCode
默认为 302
路过 statusCode 到您的配置时,您可以更改默认状态代码值.
接受数值为 301 财务报告和审定财务报表 302
// Other modules, then...
'@apostrophecms/redirect': {
options: {
statusCode: 301
}
}
注意永久重定向被谷歌缓存很长时间. 最好鼓励用户先用一个临时的重定向进行测试,然后切换到永久,这是SEO的最佳做法——只要它是正确的.
withType
默认为 @apostrophecms/page
路过 withType 到您的配置中,您可以指定您内部重定向可以重定向的文档类型.
// Other modules, then...
'@apostrophecms/redirect': {
options: {
withType: 'article'
}
}
说明: Aposfrope 2支持从单一界面创建多个 doc类型的关系. 这个功能在较新的Aposrope版本中尚不存在,因为这样的重定向只能指定一个单一的doc类型来重定向.
skip
对于性能,可以跳过匹配某些正则表达式的 URL 重定向检查 .
默认配置 skip 选项是:
// Other modules, then...
'@apostrophecms/redirect': {
options: {
skip: [ /\/api\/v1\/.*/ ]
}
}
如果你想跳过其他模式,我们建议保留默认模式,因为它可以加速API的呼叫.
caseInsensitive
默认为 false
路过 caseInsensitive: true 中,每个方向的“旧 URL”与收到的请求的 URL 匹配,而不考虑大小写。 当从一个对大小写不敏感(例如 IIS)的网络服务器迁移时,这样做是有用的,因为该服务器的重定向规则可能已经输入了混合大小写弹片,例如 /Events 或者说 /About-Us/Partners,但入境流量(旧书签、搜索引擎结果、外部链接)可能携带任何外壳抵达,例如 /events 或者说 /EVENTS。 。 。 .
// Other modules, then...
'@apostrophecms/redirect': {
options: {
caseInsensitive: true
}
}
当启用此选项时 :
- 新的和已编辑的重定向器将它们的"旧 URL"自动存储在小写中.
- 迁移运行到任何已存在的重定向的“ 旧 URL ” 小写 .
- 来信请求 URL 在与存储的重定向相匹配之前会小写(在将通配符替换为目的地 URL时仍然使用请求的原始外壳).
⚠️ 此选项不支持“ 混合” 大小写敏感和大小写不敏感重定向 . 允许它小写所有已存在的“ 旧 URL” 值, 此迁移是 不可逆变。如果您以后停止操作 caseInsensitive,您先前存在的重定向将只匹配小写请求 URL,因为它们所存储的"旧 URL" 值仍然是小写 。 如果这对您有关系, 您需要手动重新创建受影响的重定向器, 并使用其原有的混合大小写“ 旧 URL ” 值 .
使用量
在登录为管理员时,单击"重定向"按钮. 显示方向列表, 初始为空 。 添加您喜欢的 。 "来自" URL 必须从 /。“to” URL可能是任何东西,不需要在您的网站上。 "叙事"场为自取.
匹配查询字符串
默认情况下,重定向包含任何查询字符串(即 ? 和任何随行,直到但不包括任何 #在匹配重定向时收到的请求.
您可以在重定向定义中切换“ 匹配时忽略查询字符串” 选项, 以忽略所收到请求的查询字符串, 并且只匹配基础 URL 路径 。 不使用此选项的重定向将总是首先匹配,这样您就可以匹配各种特定的查询字符串,然后对其他案例有倒置规则.
匹配通配符
通常,除了查询字符串之外,只有精确的匹配才能被尊重. 如果您想重定向整个子目录,您可以使用 * 紧接着 /,例如:
/auto/*
这会改变方向 全部 开始的 URL /auto/ 到目的地,像这样:
/auto/hyundai -> /fr/auto
/auto/hyundai/ioniq-5 -> /fr/auto
请注意这一点 丢弃 URL 的其余部分。如果这不是你想要的,请参见下文.
准确匹配总是赢
如果你有方向调整规则 没有 *它总是会用 *。 。 。 .
例如,如果你有这样的规则:
/auto/gm/bolt -> /en/auto/gm/bolt
/auto/* -> /fr/auto
那么实际的重定向会像这样进行:
/auto/gm/bolt -> /en/auto/gm/bolt
/auto/toyota/tercel -> /fr/auto
抓取通配符
如果您正在创建“ URL” 重定向, 而不是“ Internal Page ” , 您也可以“ 抓取” 并重新使用 URL 的其余部分 * 。当 URL 的其余部分仍然正确时,此操作是有用的.
例如,如果您的“ 旧 URL ” 是:
/auto/*
在“URL”字段中,您选择“URL”作为重定向类型,并按以下键:
/fr/auto/*
然后重定向会像这样发生:
/auto/hyundai -> /fr/auto/hyundai
/auto/hyundai/ioniq-5 -> /fr/auto/hyundai/ioniq-5
创建带有多通配符规则的倒置
请注意,如果有两项重定向规则涉及 * 一个比另一个长, 越长的比赛总能赢.
例如,如果您的方向调整是这样设置的:
/auto/hyundai/* -> /en/car/hyundai/*
/auto/* -> /fr/auto/*
然后重定向会像这样进行:
/auto/mercedes -> /fr/auto/mercedes
/auto/mercedes/w123 -> /fr/auto/mercedes/w123
/auto/hyundai -> /en/car/hyundai
/auto/hyundai/ioniq-5 -> /en/car/hyundai/ioniq-5
安全问题
注意,每次方向调整都会在保存后立即活下来,并且有可能搞出方向调整的混乱. 一些明显的危险,如改变方向 /* 或者说 /api/v1/* 但还是有可能造成问题, 中, 您可以通过 MongoDB 命令行客户端删除不想要的重定向( 请查看 ) { type: "@apostrophecms/redirect" } 输入 aposDocs 收藏于MongoDB).
软重定向: 当您不需要此模块时
为方便您起见, AposfropeCMS 每次更改一页或一行的相片时都会自动创建"软重定向",条件是文档在旧的URL至少访问一次. 因此,你不需要手动 创建一个"硬方向调整"在这种情况下.
扩展模块
提供后退处理器
如果您想以另一种方式处理此模块找不到匹配的重定向, 您可以通过监听 @apostrophecms/redirect:noMatch 活动。 此事件处理器收到 req, result。发布方向调整,设置 result.redirect 在您的事件处理者。 发布“ raw” 重定向, 任何全站前缀都不会自动附加, set result.rawRedirect 在您的事件处理者。 您也可以设置 result.status 以匹配您的需要, 作为重定向状态代码, 默认是 302。 。 。 .
如果您想在重定向即将来临时更改目标url, 例如改变域名, 您可以听 @apostrophecms/redirect:beforeRedirect。此事件处理器收到 req, result。 。 。 . result 在重定向前, 将有两个属性可以更改 : status 财务报告和审定财务报表 url。 。 。 . 别 调用 req.res.redirect() 在那两起案子中 自己负责办案.
例如:
// modules/redirect-fallback/index.js
module.exports = {
handlers(self) {
return {
'@apostrophecms/redirect:noMatch': {
// will be awaited, you can do queries here if needed
async fallback(req, result) {
if (req.url.match(/pattern/)) {
result.redirect = '/destination';
}
}
}
}
}
}
防止重定向模块
如果您的目标是通过决定在某些情况下在本模块寻找匹配之前以不同方式重定向来先发制人本模块,注册你自己的中间软件并在那里执行重定向. 使用 before 指定您自己的模块的中间软件是先到的.
例如:
// modules/early-redirect/index.js
module.exports = {
middleware(self) {
return {
earlyRedirect: {
before: '@apostrophecms/redirect',
middleware(req, res, next) {
if (req.url.match(/pattern/)) {
return res.redirect('/destination');
} else {
return next();
}
}
}
};
}
};
更快地执行中间软件
默认情况下,检查重定向的本模块中间软件将视本模块在模块配置中的位置而执行.
您可以通过设置 before 选项,说明该模块应当运行哪个模块中间软件(例如) @apostrophecms/global) (中文(简体) ).
请注意,通过这样做,上述先发制人的做法将不再有效.
重定向到其它地方
有可能从一个地方转向另一个地方, 有外部的再定向, 既然您手动定义了 url 可以重定向到 .
至于内部改道(与页面的关系),这在各地也有作用, 但记住,只有在管理重定向时,您才会看到针对当前地段的内部重定向. 要找到针对不同地段内部页面的重定向,在收看"管理重定向"前切换地段
给开发者的注释: 调用查询构建器 currentLocaleTarget 隐藏与其它地块有关系的重定向(不同于当前地块).
如果您想要获得所有重定向, 无论其内部重定向的用地是什么, 您可以使用查询构建器来撤消这种行为 :
const redirects = await self.apos.modules['@apostrophecms/redirect']
.find(req)
.currentLocaleTarget(false)
.toArray();