【问题标题】:Multi domains rewrite with one laravel application使用一个 laravel 应用程序重写多个域
【发布时间】:2015-08-24 08:04:43
【问题描述】:

我有一个协调多个域的 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 --> case 'site1'
site2.com 或 www.site2.com --> case 'site2'
site3.com 或 www.site3.com --> case 'site3'

目前只工作:

site1.com --> 案例“site1”
site2.com --> 案例“site2”
site3.com --> case 'site3'

请帮忙。

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    你应该考虑在 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多