2017-07-31 220 views
0

我有一個使用Laravel 5.2構建的應用程序。該應用程序有3-4種不同類型的完全不同的使用情況,(如果可能,小型應用程序)。因此,我在主域名上託管主站點和管理員的路線。對於每個迷你應用程序,我創建了一個子域,所有迷你應用程序路徑都有自己的子域。我已映射子域的方式是:通過使用路由器功能Laravel 5.2子域路由

$sub = str_replace('http://', '', strstr(Request::fullUrl(), '.', true)); 

if ($sub == env('APP_SUB1')) { 

//Subdomain1 routes 

} else if ($sub == env('APP_SUB2')) { 

//Subdomain2 routes 

} 

現在,我希望能夠使用Laravel子域在建的子域路由,我想:

Route::group(['domain' => env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo 'Main Site'; 
     die; 
    }); 
}); 

Route::group(['domain' => '{sub1}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub1) { 
     echo 'Sub1 Site'; 
     die; 
    }); 
}); 

Route::group(['domain' => '{sub2}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub2) { 
     echo 'Sub2'; 
     die; 
    }); 
}); 

UPDATE

關於該行爲的更多信息:

  1. 當用戶訪問www.mydomain.com/login,應顯示 管理員的登錄頁面。
  2. 當用戶訪問sub1.mydomain.com/login, 時,應顯示sub1應用程序用戶的登錄頁面。
  3. 當用戶訪問sub2.mydomain.com/login,爲 用戶SUB2應用的登錄頁面應該顯示,等等...

我早些時候通過解析完整的請求URL方法然後相應地路由用戶,起作用。我想要的是更健壯和優雅的方式(所以嘗試使用laravel域路由)。但是通過我在上面顯示的示例代碼和子域,我總是看到'Sub1 Site',而不考慮傳遞的子域。

+0

你只需要通過它,如果你需要在回調中使用它,我會想。 – apokryfos

+0

我試過沒有通過,在這種情況下,所有的URL只打印「sub1」 – gentrobot

+0

你可以更新你的問題,什麼不工作,以及預期的行爲應該是什麼? – apokryfos

回答

1

我認爲在它的工作方式上存在一些誤解。如果您通過在{}子域那麼你基本上是說這是一個可變的子域名,這意味着'{sub1}.'.env('APP_DOMAIN')'{sub2}.'.env('APP_DOMAIN')基本上是相同的東西,但是用的子域不同的變量名:

例子:

Route::group(['domain' => '{sub1}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub1) { 
     echo $sub1." Site"; 
     //Prints sub1 Site when visiting sub1 and sub2 site when visiting sub2 
     die; 
    }); 
}]); 

什麼(我假設),你想要的是:

Route::group(['domain' => 'sub1.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo "Sub1 Site"; 
     die; 
    }); 
}]); 
Route::group(['domain' => 'sub2.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo "Sub2 Site"; 
     die; 
    }); 
}]); 

注意去除{}這意味着第一組將匹配字面 sub1。而不是*.<rest of domain>

+0

謝謝你指導我正確的方向。那對我來說太愚蠢了。讓我試試這樣做的正確方法。 – gentrobot

+0

我現在已經爲主站點添加了所有路由,並且打開了所有子域路由,並將其與相應的子域分組,如您在上面的代碼示例中所示。非常感謝你的幫助。 – gentrobot

3

我試圖不經過在此情況下,所有的URL打印只有「SUB1」

當然,由於第一路徑組捕獲的所有請求。 您可以完全刪除第二個路由組,並添加邏輯(您不應該在路由配置中執行)來處理子域。

{sub1}可能是真的,所以當你輸入時,例如, 「anythingreally.mydomain.com/login」它仍然會被捕獲,並將子域傳遞給變量$ sub1。