【问题标题】:laravel 5 main domain with www and also recognize sub domainslaravel 5 带有 www 的主域,也可以识别子域
【发布时间】:2015-04-22 03:16:33
【问题描述】:

我有域作为 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,我得到的输出为

我是根

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

我是某个子域

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

我是 www 子域

我能想到的是用 www 定义另一个自定义域组,但我认为这不是很好,也不是很好的做法。在 RewriteEngine On

之后,我尝试在我的 .htaccess 文件中进行如下修改
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

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

我是 www 子域

然后我将我的第一个路由组从 example.dev 更改为 www.example.dev 并且它成功了! 但我只需要知道这是否是正确的方法吗?还是为多个子域使用组是唯一的方法?并且您知道通过控制器从数据库中检查子域的任何简单且最佳的方法,因此我将检查它是否存在子域,然后使用它的视图提供服务,否则会传递未找到错误。我知道在某个地方可以使用过滤器和使用 before 来完成,但不知道确切!

非常感谢您的帮助。 谢谢:)

【问题讨论】:

  • 为什么不在您的路线组关闭中检查if($sub == "www")
  • @Joe 所以你的意思是在我检查任何子域的第二组中,我检查为'if($sub == "www")' 然后提供我的家庭内容(我是根!!)?那么我应该删除我的第一组吗?
  • 我删除了我的第一个组,并使我的第二个域组如下,但输出为 我是 www 子域 Route::group(array('domain' =&gt; '{sub}.bedivilla.dev'), function($sub) { if($sub == "www"){ return "I'm root!"; } Route::get('/', function($sub) { return "I'm ".$sub." subdomain" ; }); });
  • 我会选择 htaccess 方法。如果是搜索引擎,一个网站最好只有一个域。即,如果您在名片上使用 www.example.com,则永久重定向到 www 子域是有意义的,反之亦然。
  • @RaphaelMüller 在 SEO 方面我有超过四年的非常好的经验,但在这种情况下,我在 laravel 中设置我的路线时遇到问题。

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


【解决方案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";
        });
    }
});

【讨论】:

  • 在您上面的代码中,您忘记将 $sub 作为参数传递给路由组函数,因此它可以在 if 语句中使用。我已经尝试使用该代码,但 www.example.dev 的输出仍然是 I'm www subdomain
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 2018-02-06
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多