php-Laravel路由到多域
作者:互联网
我正在创建一个平台来支持该平台下的多个网站,并且某些网站需要具有不同的域.
最常见的是使用相同的域:
myrootdomain.com/first_product/profile
myrootdomain.com/second_product/profile
在这些情况下,{first_product}和{second_product}将作为参数传递给几乎所有函数. / first_product和/ second_product是在同一平台下运行的总共不同的网站.
但是我需要创建另一个产品,在其中可以更改TLD,并且仍然能够将{anotherrootdomain}标识为函数的第一个参数.像这样:
anotherrootdomain.com/profile
我已经在使用Route :: bind处理第一个参数.
<?php
Route::bind('short_url', function($value, $route)
{
$product = Product::where('short_url', $value)->first();
if(is_null($product))
return false;
return $product->id;
});
Route::get('/{short_url}/login', 'HomeController@login');
Route::get('/{short_url}/profile', 'UserController@profile');
现在我不知道如何:
1)寻找域
2)使用域作为第一个参数
我知道我的英语太糟糕了,但是我希望你能帮助我!
编辑:
我可以在routes.php上执行以下操作:
if($_SERVER['HTTP_HOST'] == "anotherrootdomain.com")
$tld = "anotherrootdomain";
然后,我需要借此机会:
Route::get('/{short_url}/login', 'HomeController@login');
Route::get('/{short_url}/profile', 'UserController@profile');
对此:
Route::get('/login', 'HomeController@login');
Route::get('/profile', 'UserController@profile');
而且我可以使用简单的if来做到这一点,但是现在我无法在路由上传递参数! HomeController @ login需要一个参数,我需要传递$tld变量,但是我不知道如何!
解决方法:
我意识到了一种方法!
假设我的示例中的/ second_product需要使用其他TLD(例如“ awesomeproduct.com”)进行访问.一些网址需要碰巧:
myrootdomain.com/second_product/login => awesomeproduct.com/login
myrootdomain.com/second_product/profile => awesomeproduct.com/profile
尽管first_product仍仅以第一种方式起作用:
myrootdomain.com/first_product/login
myrootdomain.com/first_product/profile
为了实现这一点,我创建了一个具有子域的路由组(我不知道我也可以在TLD上使用通配符):
Route::group(array('domain' => '{short_url}.com'), function($short_url)
然后我更改了Route :: bind来更改{short_url}参数:
Route::bind('short_url', function($value, $route)
{
if($value == "awesomeproduct")
$value = "second_product";
$product = Product::where('short_url', $value)->first();
if(is_null($product))
return false;
return $product->id;
});
最后,我需要更改要使用{short_url}的路由:
$tld = "";
if($_SERVER['HTTP_HOST'] != "testefacop.com")
$tld = "{short_url}/";
Route::get('/'.$tld.'login', 'HomeController@login');
Route::get('/'.$tld.'profile', 'UserController@profile');
这是我完整的routes.php:
<?php
Route::bind('short_url', function($value, $route)
{
if($value == "awesomeproduct")
$value = "second_product";
$product = Product::where('short_url', $value)->first();
if(is_null($product))
return false;
return $product->id;
});
Route::group(array('domain' => '{short_url}.com'), function($short_url)
{
$tld = "";
if($_SERVER['HTTP_HOST'] != "awesomeproduct.com")
$tld = "{short_url}/";
Route::get('/'.$tld.'login', 'HomeController@login');
Route::get('/'.$tld.'profile', 'UserController@profile');
}
这不是一个很好的解决方案,但是可以按预期运行!
标签:laravel-routing,laravel,php 来源: https://codeday.me/bug/20191029/1961969.html