silverstripe / multi-domain
允许多个域名访问一个CMS实例,将它们映射到不同的层次结构部分
Requires
- silverstripe/framework: ^3.1
This package is not auto-updated.
Last update: 2024-09-11 15:51:20 UTC
README
允许多个域名访问一个CMS实例,将它们映射到不同的层次结构部分,从而允许使用虚荣URL。示例
example.com
-> 解析为首页example.com/shop/store
-> 解析为商店页面example-store.com
-> 显示example.com/shop/store
的内容。example-store.com/checkout
-> 显示example.com/shop/store/checkout
的内容
需求
- silverstripe/framework ^4.0
配置
每个域名通过一个键来标识。您必须使用primary
键定义一个域名,将其标记为主要域名。
--- Name: mymultidomain After: '#multidomain' --- SilverStripe\MultiDomain\MultiDomain: domains: primary: hostname: 'example.com' store: hostname: 'example-store.com' resolves_to: 'shop/store'
选项
allow_subdomains
: 如果为true,则域名匹配不受子域名限制,因此anything.example.com仍然映射到example.com,如上配置中的主要域名。
白名单
有时您可能有一些应该正常解析的路线,并绕过多域名过滤器。在这种情况下,对于任何给定的域名,您可以指定一个allow
列表。
--- Name: mymultidomain After: '#multidomain' --- SilverStripe\MultiDomain\MultiDomain: domains: primary: hostname: 'example.com' store: hostname: 'example-store.com' resolves_to: 'shop/store' allow: - 'admin/*' - 'Security/*' - 'my-custom-webhook/'
在上面的示例中,任何以admin/
、Security/
或匹配my-custom-webhook/
开始的URL将解析到任何域名。
全局白名单
您可以将您的allow
节点直接放在MultiDomain
下以创建全局白名单。
--- Name: mymultidomain After: '#multidomain' --- SilverStripe\MultiDomain\MultiDomain: allow: - 'admin/*' - 'Security/*' - 'my-custom-webhook/'
强制URL到特定域名
有时,您可能有一个位于代表域名的节点之外但仍然希望将其视为该域名一部分的页面。为此,您可以使用force
选项。
--- Name: mymultidomain After: '#multidomain' --- SilverStripe\MultiDomain\MultiDomain: domains: primary: hostname: 'example.com' store: hostname: 'example-store.com' resolves_to: 'shop/store' force: - 'buy-now/*'
在上面的配置中,页面buy-now
可以位于网站根目录,但URLexample-store.com/buy-now
仍然会解析页面,即使页面不在shop/store
下。
使用环境变量
如果您有多个测试环境,则可能不需要在配置中硬编码主机名。或者,您可以定义一个环境变量(即一个常量),然后在配置中将其作为字符串引用。
--- Name: mymultidomain After: '#multidomain' Only: environment: 'test' --- SilverStripe\MultiDomain\MultiDomain: domains: primary: hostname: STAGING_PRIMARY_HOSTNAME store: hostname: STAGING_STORE_HOSTNAME resolves_to: 'shop/store' force: - 'buy-now/*'
这样,每个环境都可以独立声明其主机名。
为什么不使用子站点?
子站点为给定的域名创建了一个并行的CMS实例。此模块允许您在所有其他页面上下文中将域名映射到特定的层次结构部分。
为什么不使用“域名的首页”?
这对于创建一个页面的虚荣URL很有用,但一旦深入到层次结构中,您就会回到原始URL。需要一个更健壮的解决方案来持久化虚荣URL。
此外,此模块具有更好的可扩展性,可以与其他URL密集型模块(如Translatable或Fluent)协同工作。