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

How to generate proper links using Laravel subdomain routing?

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

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

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

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

我的假设是,以下列方式生成 links 会引导我找到正确的路线:

//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']); properely 生成link 到 'cats.localhost/public'.

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

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

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 错误。

我如何在子域中生成 link 以代替顶级域?这可以在不依赖重定向的情况下完成吗?

好吧,我通过修改 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');
});