我创建了一个平台,以支持平台下的多个网站,有些网站需要有不同的域名。
最常见的是使用相同的域名:
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变量,但我不知道怎么做!
答案 0 :(得分:4)
我意识到了这样做的方法!
让我们说示例中的my / second_product需要使用其他TLD访问,例如&#34; awesomeproduct.com&#34;。有些网址需要偶然:
myrootdomain.com/second_product/login =&gt; awesomeproduct.com/login
myrootdomain.com/second_product/profile =&gt; 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');
}
它不是一个伟大而美丽的解决方案,但它按预期工作!