【发布时间】:2020-05-22 19:57:38
【问题描述】:
假设我有 domain1.com 和 domain2.com。我希望它们都指向同一个 laravel 应用程序,但显示不同的页面。例如,domain1.com 将引用将呈现页面 X 的控制器 X,而 domain2.com 将引用将呈现页面 Y 的控制器 Y。这可能吗?如果是这样,我将如何编码路由?请记住,我不是在谈论子域。
【问题讨论】:
假设我有 domain1.com 和 domain2.com。我希望它们都指向同一个 laravel 应用程序,但显示不同的页面。例如,domain1.com 将引用将呈现页面 X 的控制器 X,而 domain2.com 将引用将呈现页面 Y 的控制器 Y。这可能吗?如果是这样,我将如何编码路由?请记住,我不是在谈论子域。
【问题讨论】:
您可以制作多个网络路由文件。
然后在RouteServiceProvider.php中的mapWebRoutes()方法中根据主机名切换路由文件。
protected function mapWebRoutes()
{
$request = $this->app->make(Request::class);
if ($request->getHost() === "example.com") {
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/example.com.web.php'));
} else {
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/othersite.com.web.php'));
}
}
如果您需要将控制器拆分为单独的命名空间(以避免混淆),您也可以通过指定命名空间在该方法中进行管理。
更新:
根据 cmets 的要求,如何在路由文件中使用 if 的示例:
//routes/web.php
if (request()->getHost() === "example.com") {
Route::get('/', 'OneController@index');
} else {
Route::get('/', 'AnotherController@index');
}
【讨论】:
$request = $this->app->make(Request::class); if ($request->getHost() === "example.com") { Route::post('/', 'example_controller@example_method'); } 你的意思是这样吗?