如何使用Laravel子域路由生成正确的链接?

时间:2016-09-15 11:30:16

标签: php laravel routing

我正在尝试将动态子域路由添加到项目中。我遇到的问题是在子域和顶级域之间生成链接。

首先我尝试用这种方式创建路线:

Route::get('/','MainController@getHome')->name('home');

Route::group(array('domain' => '{subdomain}.localhost/public'), function() {
    Route::get('/','MainController@getHomeNew' )->name('home_mew');
});

我的假设是,以下列方式生成链接会让我走上正确的路线:

//I assumed this would always generate a link to the root of 'localhost/public/':
route('home'); 

//And that this would always take me to a sub domain root e.g. 'cats.localhost/public/':
route('home_new', ['subdomain' => 'cats']); 

使用 route('home_new',['subdomain'=>'cats'])在顶级域名页面上时,会生成一个指向'cats.localhost / public'的链接

问题是,一旦我在 cats.localhost / public 并且我使用 route('home'),我仍然会被重定向到 cats.localhost /公共

所以我尝试将顶级域路由包装在一个自己的组中:

Route::group(array('domain' => 'localhost/public'), function() {
    Route::get('/','MainController@getHome')->name('home');
});

Route::group(array('domain' => '{subdomain}.localhost/public'), function() {
    Route::get('/','MainController@getHomeNew' )->name('home_mew');
});

但无论我是转到顶级域根还是子域根,都会导致404错误。

如何在子域中生成会导致顶级域名的链接?这可以在没有例如依赖重定向的情况下完成吗?

1 个答案:

答案 0 :(得分:0)

我通过修改 c:/ windows / system32 / drivers / etc / hosts 文件并添加以下行来解决问题:

127.0.0.1 myapp.com subdomain.myapp.com anothersub.myapp.com

然后我更改了 C:\ xampp \ apache \ conf \ extra \ httpd-vhosts 配置文件并添加了:

<VirtualHost *:80>
    ServerName www.myapp.com
    ServerAlias myapp.com
    DocumentRoot C:\xampp\htdocs\myapp\_src\public
</VirtualHost>

这样修改我的路线:

Route::group(array('domain' => 'myapp.com'), function()
{
    Route::get('/','MainController@getHome')->name('home');
});

Route::group(array('domain' => '{subdomain}.myapp.com'), function() {
    Route::get('/','SubController@getHome' )->name('home_new');
});