簡體   English   中英

Laravel路由到多域

[英]Laravel Route to multi domain

我正在創建一個平台以支持平台下的多個網站,有些網站需要有不同的域名。

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

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”。 一些URL需要機會:

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');

}

它不是一個偉大而美麗的解決方案,但它按預期工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM