Laravel使用虚拟子域名路由

时间:2016-08-30 13:39:28

标签: laravel laravel-5 routes

我正在创建一个应用程序,其中一些路由应该像从子域路由一样。

注意:我不想创建子域名。一切都将从控制器和路线开始。

这是网址

http://myapp.com/site/Home

这是路线

Route::group(['domain' => '{site}.myapp.com'], function () {
   Route::get('/{site}/{page}', 'page@site');

});

我想让网址看起来像

http://site.myapp.com/Home

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

你只有一次机会以优雅的方式做你想做的事。您需要一个所谓的子域通配符。这意味着您的托管服务商可以选择将* .mydomain.tdl定义为子域。

此子域需要指向与mydomain.tdl完全相同的文件夹 - 因此应用的公用文件夹。不要改变其他任何东西。

最后定义一个组以获取所有子域作为参数

Route::group(['domain' => '{user}.mydomain.tdl'], function()
{
     Route::get('{site}', 'MyController@DoStuff');
}

对于测试目的,您还可以简单地在组外定义第二个通用路线

Route::get('{user}/{site}', 'MyController@DoStuff');

现在您必须选择访问该页面

  • username.mydomain.tdl /网站名称
  • mydomain.tdl /用户名/网站名称

请注意以下事项:如果您定义通配符,www也是子域名。因此,www将开始匹配您的defiend子域。

另一个重要的细节是你很难在localhost上运行它。如果您不确定通配符,只需定义一个与该组

匹配的特定新子域

example.myDomain.tdl可以指向laravel-app公共文件夹(就像myDomain.tdl一样),而不应该将示例作为已定义路由的参数传递