SaaS路由出错

时间:2013-12-04 06:59:18

标签: laravel laravel-4

我正在开发SaaS应用程序,在路线中我有以下代码

$subdomain = '';
$domain_parts = explode('.', Request::server('HTTP_HOST'));
if (count($domain_parts) == 3) {
$subdomain = $domain_parts[0];

    if ($subdomain == 'www') {
      $subdomain = '';
    } 
}
if (empty($subdomain)) {
    Route::get('/', 'IndexController@showIntro');
} else {

Route::group(array('domain' => '{subdomain}.'.Config::get('app.domain'), 'before' => 'db.setup'), function() {
          {
    Route::get('/', array(
        'as' => 'login',
        'uses' => 'LoginController@showLoginForm'
    ));
    Route::post('login', array(
        'as' => 'performLogin',
        'uses' => 'LoginController@performLogin'
    ));
    Route::get('logout', array(
        'as' => 'logout',
        'uses' => 'LoginController@performLogout'
    ));
});

问题是如果子域存在,那么它将不会重定向到登录页面。如果我删除Route::group中数组的内容 然后它会工作,但数组内容是必要的,我得到的错误是NotFoundHttpException我知道有一个小错误但没有得到,所以任何解决此路由错误。

谢谢。

1 个答案:

答案 0 :(得分:0)

此处的评估实际上没有必要:

$subdomain = '';

$domain_parts = explode('.', Request::server('HTTP_HOST'));
if (count($domain_parts) == 3) {
$subdomain = $domain_parts[0];

    if ($subdomain == 'www') {
      $subdomain = '';
    } 
}
if (empty($subdomain)) {
    Route::get('/', 'IndexController@showIntro');
} else {

你可以摆脱这段代码,然后简单地说  Route::get('/', 'IndexController@showIntro'); 在子域Route::group()之后。

我这样做:

Route::group(array('domain' => '{account}.' . Config::get('database.environment_url') .'') , function()
{
   //  Subdomain-only activity here.
}

// If there is no subdomain, Laravel will go straight to this route first.
Route::get('/' , 'IndexController@showIntro');

希望这有帮助!

编辑::要添加到此 - 如您所知,WWW被laravel视为子域。如果您想为“www”子域执行特殊操作,可以在子域组中执行此操作。