编程语言
首页 > 编程语言> > php-Laravel路由到多域

php-Laravel路由到多域

作者:互联网

我正在创建一个平台来支持该平台下的多个网站,并且某些网站需要具有不同的域.

最常见的是使用相同的域:

myrootdomain.com/first_product/profile

myrootdomain.com/second_product/profile

在这些情况下,{first_product}和{second_product}将作为参数传递给几乎所有函数. / first_product和/ second_product是在同一平台下运行的总共不同的网站.

但是我需要创建另一个产品,在其中可以更改TLD,并且仍然能够将{anotherrootdomain}标识为函数的第一个参数.像这样:

anotherrootdomain.com/profile

我已经在使用Route :: bind处理第一个参数.

<?php

Route::bind('short_url', function($value, $route)
{
    $product = Product::where('short_url', $value)->first();

    if(is_null($product))
        return false;
    return $product->id;
});

Route::get('/{short_url}/login', 'HomeController@login');
Route::get('/{short_url}/profile', 'UserController@profile');

现在我不知道如何:

1)寻找域

2)使用域作为第一个参数

我知道我的英语太糟糕了,但是我希望你能帮助我!

编辑:

我可以在routes.php上执行以下操作:

if($_SERVER['HTTP_HOST'] == "anotherrootdomain.com")
    $tld = "anotherrootdomain";

然后,我需要借此机会:

Route::get('/{short_url}/login', 'HomeController@login');
Route::get('/{short_url}/profile', 'UserController@profile');

对此:

Route::get('/login', 'HomeController@login');
Route::get('/profile', 'UserController@profile');

而且我可以使用简单的if来做到这一点,但是现在我无法在路由上传递参数! HomeController @ login需要一个参数,我需要传递$tld变量,但是我不知道如何!

解决方法:

我意识到了一种方法!

假设我的示例中的/ second_product需要使用其他TLD(例如“ awesomeproduct.com”)进行访问.一些网址需要碰巧:

myrootdomain.com/second_product/login => awesomeproduct.com/login

myrootdomain.com/second_product/profile => awesomeproduct.com/profile

尽管first_product仍仅以第一种方式起作用:

myrootdomain.com/first_product/login

myrootdomain.com/first_product/profile

为了实现这一点,我创建了一个具有子域的路由组(我不知道我也可以在TLD上使用通配符):

Route::group(array('domain' => '{short_url}.com'), function($short_url)

然后我更改了Route :: bind来更改{short_url}参数:

Route::bind('short_url', function($value, $route)
{
    if($value == "awesomeproduct")
        $value = "second_product";

    $product = Product::where('short_url', $value)->first();

    if(is_null($product))
        return false;
    return $product->id;
});

最后,我需要更改要使用{short_url}的路由:

$tld = "";
if($_SERVER['HTTP_HOST'] != "testefacop.com")
    $tld = "{short_url}/";

Route::get('/'.$tld.'login', 'HomeController@login');
Route::get('/'.$tld.'profile', 'UserController@profile');

这是我完整的routes.php:

<?php

Route::bind('short_url', function($value, $route)
{
    if($value == "awesomeproduct")
        $value = "second_product";

    $product = Product::where('short_url', $value)->first();

    if(is_null($product))
        return false;
    return $product->id;
});

Route::group(array('domain' => '{short_url}.com'), function($short_url)
{
    $tld = "";
    if($_SERVER['HTTP_HOST'] != "awesomeproduct.com")
        $tld = "{short_url}/";

    Route::get('/'.$tld.'login', 'HomeController@login');
    Route::get('/'.$tld.'profile', 'UserController@profile');

}

这不是一个很好的解决方案,但是可以按预期运行!

标签:laravel-routing,laravel,php
来源: https://codeday.me/bug/20191029/1961969.html