silverstripe / redirectedurls
为用户提供在CMS中配置任意重定向的系统
3.0.0
2023-02-28 17:13 UTC
Requires
- php: ^8.1
- silverstripe/cms: ^5
- unclecheese/display-logic: ^3
Requires (Dev)
README
作者
- Sam Minnée
- Stig Lindqvist
- Russ Michell
此模块为用户提供在CMS中配置任意重定向的系统。这些可以用于旧的重定向、友好的URL以及其他涉及将一个URL重定向到另一个URL的情况。
URL可能包括查询字符串,并且可以使用包含的"Redirects"模型管理员从CSV导入。
重定向作为404处理器的一个插件实现,这意味着您不能为已存在于网站上的页面创建重定向。
需求
- PHP
^8.1
- Silverstripe CMS
^5
遗留
- Silverstripe CMS
^4
:^2
标签 - Silverstripe CMS
^3
:^1
标签
安装
- 使用composer在命令行中运行以下命令
composer require silverstripe/redirectedurls
- 然后运行 dev/build (http://www.mysite.com/dev/build)
用法
- 在CMS主菜单中点击'重定向'。
- 点击'添加重定向URL'以在您的Silverstripe网站上创建旧URL到新URL的映射。
- 输入'基础URL',即您的旧网站的URL(不包括域名)。例如,"/about-us.html"。
- 或者,根据您旧网站的URL结构,您可以使用'基础URL'和'查询字符串'字段的组合根据查询字符串进行重定向。例如,"index.html"作为基础,"page=about-us"作为查询字符串。
- 作为进一步的选择,您可以在末尾包含一个尾随的'/*'来进行通配符匹配,以匹配具有相同根的任何文件。例如,"/about/*"。
- 完成'To'字段,即您希望重定向流量到的URL。例如,"/about-us"。
- 或者,您可以在'To'字段末尾使用'/*'来重定向到用户请求的特定文件。例如,"/new-about/*"。请注意,如果此特定文件不在目标目录树中,则404错误将由目标网站处理。
- 为需要重定向的每个URL映射创建一个新的重定向。
例如,要将"/about-us/index.html?item=1"重定向到"/about-us/item/1",设置
From Base: /about-us/index.html
From Querystring: item=1
To: /about-us/item/1
导入
- 创建一个包含列标题'FromBase'、'FromQuerystring'和'To'的CSV文件,并输入您的URL映射。
- 在CMS主菜单中点击'重定向'。
- 在'导入'部分点击'选择文件',选择您的CSV文件,然后点击'从CSV导入'。
- 可选地选择'替换数据'选项,如果您想用导入的数据替换RedirectedURL数据库表的内容。
CSV导入器,示例文件格式
FromBase, FromQuerystring, To
/about-us/index.html, item=1, /about/item/1
/example/no-querystring.html, ,/example/no-querystring/
/example/two-queryparams.html, foo=1&bar=2, /example/foo/1/bar/2
/about/*, ,/about-us
允许从资产URL进行重定向
这假设您的项目有silverstripe/assets
。
请注意:默认情况下,许多网络服务将资产(和其他资源)直接通过Nginx路由。如果这是您的案例,那么请注意,添加以下扩展将不足以启用此功能。
--- Name: app-redirectedurls --- SilverStripe\Assets\Flysystem\FlysystemAssetStore: extensions: - SilverStripe\RedirectedURLs\Extension\AssetStoreURLHandler
通过Apache路由资产
这可能会因您的网络服务而有所不同,但您可以使用以下内容,对于任何尊重.platform.yml
配置的服务,并且如果您正在使用最新的Silverstripe dev-boxes
,则可以使用。
性能考虑
请务必注意,Apache 在服务静态资源方面比 Nginx 慢。进行这项更改可能会对您应用程序的性能产生重大影响。
实现方式
URL 规则允许您自定义默认行为
url_rules: mysite: - '<regex>': '<rule>'
正则表达式必须使用 Nginx 接受的格式。这将用作不区分大小写的位置匹配器,并与完整 URL 进行比较。
^/assets/
- 匹配指向 assets 目录的所有 URL\.(gif|jpg|jpeg)$
- 匹配 URL 结尾的扩展名
例如,如果您想将所有资源路由到 Apache。
platform.yml
:
url_rules: mysite: - '^/assets/': 'apache'
关于限制 Apache 服务的资源的一些思考
除了服务所有资源,您是否可以指定特定的扩展名(或扩展名)?例如,您是否只想支持对 PDF 的重定向?
url_rules: mysite: - '^/assets/.+\.(pdf)$': 'apache'
或者,是否只服务您与内容创作者指定的特定资源目录?
url_rules: mysite: - '^/assets/Documents/': 'apache'