使用一个laravel应用程序重写多个域

时间:2015-06-09 13:17:51

标签: php .htaccess mod-rewrite

我有一个laravel应用程序可以协调多个域。

public function showWelcome()
{
    switch ($_SERVER['SERVER_NAME'])
    {
        case 'site1':
            return View::make('site1.public.index');
            break;

        case 'site2':
            return View::make('site2.public.index');
            break;

        case 'site3':
            return View::make('site3.public.index');
            break;
    }
}

当我输入site1.com时 - 一切正常,但是当我输入www.site1.com时 - 只是白屏。 其他域名存在同样的问题。

我尝试用.htaccess修复它,如果我键入第一个域(有或没有www) - 只是工作。如果我输入其他域名site2.com或www.site2.com例如 - 重定向到site1.com

我也试过这个:

if (substr($_SERVER['SERVER_NAME'], 0, 4) == 'www.') {
$domain = substr($_SERVER['SERVER_NAME'], 4);
} else {
$domain = $_SERVER['SERVER_NAME'];
}

但不行。 所有域都转到showWelcome()方法。

结果必须是:

site1.com或www.site1.com - >案例'site1'
site2.com或www.site2.com - >案例'site2'
site3.com或www.site3.com - >案例'site3'

目前只在工作:

site1.com - >案例'site1'
site2.com - >案例'site2'
site3.com - >案例'site3'

请帮忙。

1 个答案:

答案 0 :(得分:3)

你应该考虑使用"域"在laravel中的路由文件中路由组,这对域有很大的支持。 routes.php文件示例:

$site1Routes = function() {
    Route::get('/', function() {  return View::make('site1.public.index'); });
}

$site2Routes = function() {
    Route::get('/', function() {  return View::make('site2.public.index'); });
}

$site3Routes = function() {
    Route::get('/', function() {  return View::make('site3.public.index'); });
}

Route::group(array('domain' => 'site1.com'), $site1Routes);
Route::group(array('domain' => 'www.site1.com'), $site1Routes);

Route::group(array('domain' => 'site2.com'), $site2Routes);
Route::group(array('domain' => 'www.site2.com'), $site2Routes);

Route::group(array('domain' => 'site3.com'), $site3Routes);
Route::group(array('domain' => 'www.site3.com'), $site3Routes);

对当前脚本进行快速修复,可以简单地将www.替换为EMPTY,这样就可以将其从服务器名字符串中排除。

public function showWelcome()
{

    $domain = $_SERVER['SERVER_NAME'];
    $domain = str_replace('www.','', $domain);

    switch ($domain)
    {
        case 'site1':
            return View::make('site1.public.index');
            break;

        case 'site2':
            return View::make('site2.public.index');
            break;

        case 'site3':
            return View::make('site3.public.index');
            break;
    }
}