rsthn/rose-ext-router

路由扩展(Rose)

安装: 115

依赖项: 1

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:rose-extension

1.0.13 2022-04-14 17:09 UTC

This package is auto-updated.

Last update: 2024-09-14 22:14:02 UTC


README

此扩展向 Rose 添加内容路由功能。

composer require rsthn/rose-ext-router

安装后,确保通过编辑 system.conf 文件的 Gateway 部分,将 Router 设置为系统中的主服务,并将 service=router。另外,除非您想使用 index.php/my-route/,否则我们建议您启用 URL 重写以创建美观的 URL。如果使用 Apache 或兼容服务器,可以使用以下 .htaccess

RewriteEngine On
RewriteBase /my-project/

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]


 

默认操作

Router 将使用 Gateway 提供的相对路径(例如,当使用 index.php/home 类似的东西时,相对路径是 /home)并使用以下规则(按优先级顺序,满足条件者先)返回适当的内容。

  • 用户已认证1且存在 rcore/content/home/private.html 文件时,将加载该文件,使用 Expr 进行评估并发送给客户端。

  • 用户未认证且存在 rcore/content/home/public.html 文件时,将加载该文件,使用 Expr 进行评估并发送给客户端。

  • 当存在 rcore/content/home/index.html 文件时,将加载该文件,使用 Expr 进行评估并发送给客户端。

  • 用户未认证且仅存在 rcore/content/home/private.html 时,Router 将重定向到 /login

  • Router 将重定向到 /404

1“已认证用户”条件通过检查当前会话(如果有)的 user 字段是否设置为非空值(由 Sentinel 设置)来确定。


 

路由到服务或 URL

当某个路由(例如 /api)应将控制权传递给另一个 Rose 服务(例如 wind)或重定向到 URL 时,您可以使用 system.conf 文件的 Router 部分来实现此目的,通过提供 "route=service_name" 对(其中 route 是无分隔符的正则表达式),例如:

[Router]
/api = service:wind
/details/([0-9]+) = service:wind/?f=get-details&id=(1)
/external-page = location:https://example.com/contact-us/
/([0-9]+)/home = home/(1)

服务重定向

  • 在值中使用 service: 前缀将导致内部重定向到指定的服务。

    • 例如,/api = service:wind 将重定向到服务 wind
  • 值中提供的任何路径都将设置为新的相对路径。

    • 例如,/api = service:wind/details 将重定向到服务 wind,并将相对路径设置为 /details
  • 客户端在路由基本路径之后提供的任何路径都将附加到相对路径。

    • 例如,/api = service:wind/details 但由客户端作为 /api/users 加载时,将导致重定向到服务 wind,相对路径为 /details/users
  • 值中提供的任何查询参数将合并到当前请求参数中。

    • 例如,/api = service:wind/details?b=B 并由客户端作为 /api/users?a=A 加载时,将导致重定向到服务 wind,相对路径为 /details/users,请求参数为 a=A&b=B

位置重定向

  • 在值中使用 location: 前缀将导致在响应 HTTP 头部中设置 location 头,并立即终止执行。

    • 例如,/contact = location:https://example.com/ 将重定向到 URL https://example.com/
  • 客户端在路由基本路径之后提供的任何路径都将被忽略。

    • 例如 /contact = location:https://example.com/ 和从客户端加载为 /contact/sub-path/ 将重定向到 https://example.com/
  • 客户端指定的任何查询参数将被忽略。

    • 例如 /contact = location:https://example.com/?a=A 和从客户端加载为 /contact/sub-path/?b=B 将重定向到 https://example.com/?a=A

注意

路由的值使用 Expr 来评估,因此如果需要,可以进行格式化,并且可以通过 (gateway.request.<name>) 的方式通常访问网关请求参数映射中的变量。