silverstripe/redirectedurls

为用户提供在CMS中配置任意重定向的系统

安装量: 421 892

依赖项: 13

建议者: 0

安全性: 0

星标: 32

关注者: 7

分支: 48

开放性问题: 15

类型:silverstripe-vendormodule

3.0.0 2023-02-28 17:13 UTC

This package is auto-updated.

Last update: 2024-09-09 03:30:23 UTC


README

Latest Stable Version License Monthly Downloads

作者

  • 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

用法

  1. 在CMS主菜单中点击'重定向'。
  2. 点击'添加重定向URL'以在您的Silverstripe网站上创建旧URL到新URL的映射。
  3. 输入'基础URL',即您的旧网站的URL(不包括域名)。例如,"/about-us.html"。
  4. 或者,根据您旧网站的URL结构,您可以使用'基础URL'和'查询字符串'字段的组合根据查询字符串进行重定向。例如,"index.html"作为基础,"page=about-us"作为查询字符串。
  5. 作为进一步的选择,您可以在末尾包含一个尾随的'/*'来进行通配符匹配,以匹配具有相同根的任何文件。例如,"/about/*"。
  6. 完成'To'字段,即您希望重定向流量到的URL。例如,"/about-us"。
  7. 或者,您可以在'To'字段末尾使用'/*'来重定向到用户请求的特定文件。例如,"/new-about/*"。请注意,如果此特定文件不在目标目录树中,则404错误将由目标网站处理。
  8. 为需要重定向的每个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

导入

  1. 创建一个包含列标题'FromBase'、'FromQuerystring'和'To'的CSV文件,并输入您的URL映射。
  2. 在CMS主菜单中点击'重定向'。
  3. 在'导入'部分点击'选择文件',选择您的CSV文件,然后点击'从CSV导入'。
  4. 可选地选择'替换数据'选项,如果您想用导入的数据替换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'