laravel 5主域名使用www并且还识别子域名

时间:2015-02-20 12:29:37

标签: php apache .htaccess mod-rewrite laravel-5

我将域名作为example.dev,我想将其重定向到laravel 5中的www.example.dev。在本地环境中,我将虚拟主机设置为example.dev,并将其别名设置为www.example.dev。

laravel 5上的.htaccess文件看起来像这样。

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
RewriteBase "/"

我在laravel中的路由文件看起来像这样。

Route::group(array('domain' => 'example.dev'), function()
{
Route::get('/', function() {
    return "I'm root!";
});
});

Route::group(array('domain' => '{sub}.example.dev'), function()
{
Route::get('/', function($sub) {

    return "I'm ".$sub." subdomain";
});
});

现在,如果我访问example.dev,我会输出

  

我是root

如果我访问something.example.dev,我会

  

我是子域名

如果我访问www.example.dev,我会得到这个......

  

我是www子域名

我能想到的是用 www 定义另一个自定义域组,但这不是很好,我相信或不是很好的做法。我在.htaccess文件中尝试了一些修改,如下所示 RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

现在,如果我访问example.dev,它重定向在www.example.dev但输出仍然是

  

我是www子域名

然后我将我的第一个路由组从example.dev更改为www.example.dev并且工作了!但我只是需要知道这是否是正确的方法?或者使用多个子域的组是唯一的方法吗?你知道从数据库通过控制器检查子域名的任何简单和最好的方法,所以我将检查它是否存在子域然后用它的视图服务,否则传递未找到错误。我知道某处可以使用过滤器并使用之前,但不完全确切!

帮助真的很感激。 谢谢:)

1 个答案:

答案 0 :(得分:1)

Route::group(array('domain' => '{sub}.example.dev'), function($sub)
{
    if($sub == 'www' || $sub == ''){
        Route::get('/',function(){
            return "I'm root!";
        });
    }
    else{
        Route::get('/', function($sub) {
            return "I'm ".$sub." subdomain";
        });
    }
});