[英]Laravel Route to multi domain
我正在創建一個平台以支持平台下的多個網站,有些網站需要有不同的域名。
最常見的是使用相同的域:
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”。 一些URL需要機會:
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');
}
它不是一個偉大而美麗的解決方案,但它按預期工作!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.