Symfony 子域路由
Symfony sub domain routing
我们如何使用子域访问 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
@Bradmage 为什么要把不需要复杂的东西复杂化?
拥有
app.example.com -> example.com/app/*
admin.example.com -> example.com/admin/*
api.example.com -> example.com/api/*
将使授权增加三倍 url 因为您需要为每个等添加登录路由,可能还有其他事情。
你为什么不离开那个并将每个子域指向你的应用程序(或严格的)并依赖于用户角色?
你也可以在 symfony 和主机参数中检查 access_control: https://symfony.com/doc/current/security/access_control.html
此解决方案将拦截 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 中的子文件夹。
问题是,如何将子域路由到文件夹?
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
@Bradmage 为什么要把不需要复杂的东西复杂化? 拥有
app.example.com -> example.com/app/*
admin.example.com -> example.com/admin/*
api.example.com -> example.com/api/*
将使授权增加三倍 url 因为您需要为每个等添加登录路由,可能还有其他事情。
你为什么不离开那个并将每个子域指向你的应用程序(或严格的)并依赖于用户角色?
你也可以在 symfony 和主机参数中检查 access_control: https://symfony.com/doc/current/security/access_control.html
此解决方案将拦截 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 访问,但在不同的子域下。