Symfony 子域路由
Posted
技术标签:
【中文标题】Symfony 子域路由【英文标题】:Symfony sub domain routing 【发布时间】:2021-07-01 02:33:27 【问题描述】:我们如何使用子域来访问 Symfony 中的子文件夹。
问题是,如何将子域路由到文件夹?
example.com -> example.com/*
app.example.com -> example.com/app/*
admin.example.com -> example.com/admin/*
api.example.com -> example.com/api/*
一些详细的例子:
url requested controller called route name
----------------------------------------------------------------
example.com/ example.com/ main_home
example.com/login example.com/login main_login
app.example.com/ example.com/app/ app_home
app.example.com/profile example.com/app/profile app_profile
到目前为止,每个控制器都可以进行硬编码
Symfony: @Route("/", name="app_home", host="example.com")
Symfony: @Route("/", name="sub1_home", host="sub1.example.com")
但我还没有找到隐藏子文件夹的方法。因此,要访问个人资料页面,您仍然需要访问 app.example.com/app/profile。这违背了在 url 中包含 /app 的子域的目的。
是的,显然任何子域都会在整个应用程序中限制子文件夹。所以你不能有 example.com/api/ 因为那会保留给 api.example.com
【问题讨论】:
【参考方案1】:@Bradmage 你为什么要把不需要复杂的事情复杂化? 有
app.example.com -> example.com/app/*
admin.example.com -> example.com/admin/*
api.example.com -> example.com/api/*
将使授权网址增加三倍,因为您需要为每个等添加登录路由,可能还需要添加其他内容。
您为什么不离开它并将每个子域指向您的应用程序(或严格的应用程序)并依赖用户角色?
也可以查看symfony中的access_control和host参数:https://symfony.com/doc/current/security/access_control.html
【讨论】:
谢谢你,我想我有点想多了。 access_control path: '^/admin', roles: ROLE_USER_ADMIN, host: admin.example\.com$ 这也解决了我的一些其他问题。【参考方案2】:此解决方案将拦截 REQUEST_URI 并将子域添加为根文件夹(如果尚未使用)。
意味着 app.example.com 和 app.example.com/app 都将访问同一个页面。
if(substr($_SERVER['HTTP_HOST'], 0, strlen('app.')) === 'app.'
&& substr($_SERVER['REQUEST_URI'], 0, strlen('/app')) !== '/app')
$_SERVER['REQUEST_URI'] = '/app'.$_SERVER['REQUEST_URI'];
这样做的好处是能够将所有控制器放在文件夹中。如果您有多个配置文件控制器,它们都可以从 /profile 访问,但在不同的子域下。
【讨论】:
以上是关于Symfony 子域路由的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 4如何使用React设置SPA(单页面应用程序)?