laravel 5.2,通配符子域

时间:2016-07-08 02:36:52

标签: nginx laravel-5.2 wildcard-subdomain

我想要这样的路线:

john-doe.mysite.local
john-another-doe.mysite.local

然后将子域名传递给某个控制器@方法并显示用户配置文件。

我正在使用Laravel Homestead

这是我本地计算机上的/etc/hosts文件:

....
192.168.10.10 mysite.local
192.168.10.10 *.mysite.local
....

在我的虚拟机上/etc/nginx/sites-available/mysite.local文件

server {
    listen 80;
    server_name mysite.local *.mysite.local;
    root "/home/vagrant/laravel-projects/mysite.com/public";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    ....

如果您还有其他需求,请询问。 主域mysite.local正常工作。

我尝试关注documentation并将其添加到我的routes.php文件中:

Route::group(['domain' => '{element}.mysite.local'], function() {

    Route::get('/', function ($element) {
        dd($element);
    });

});

但是如果我去任何子域somedomain.mysite.local我找不到服务器。

在我看来,问题是我甚至没有通过子域名到达Laravel应用程序。

感谢任何帮助。 我找到了this question,并尝试在我的.local.dev文件中将/etc/hosts更改为mysite.local,但它不起作用。我也尝试将mysite.local更改为mysite.dev,但它也无效。

我无法弄清楚我在这里失踪了什么。

更新

如果我将test.mysite.local添加到我的/etc/hosts文件中,我会在浏览器中获得相同的输出,就像我要浏览mysite.local一样。

....
192.168.10.10 mysite.local
192.168.10.10 test.mysite.local
192.168.10.10 *.mysite.local
....

更新虚拟机上的mysite.local

...
server_name mysite.local test.mysite.local *.mysite.local;
...

我尝试添加另一条路线routes.php

Route::group(['domain' => 'test.mysite.local'], function() {

    Route::get('/', function () {
        dd('you are at test subdomain');
    });

});

看它是否有效,但它没有,我仍然得到相同的输出,好像我要导航到mysite.local

另一个更新:

/etc/hosts/不支持通配符,所以目前我使用的是静态子域名,并且稍后会弄清楚如何动态子域名。

同时加上

Route::group(['domain' => '{element}.mysite.local'], function() {

    Route::get('/', function ($element) {
        dd($element);
    });

});

在顶部或您的routes.php文件。

目前我正在尝试将静态子域重定向到特定的控制器@方法。随着我的进步,这会更新。

更新 - 静态域现在正在工作:

新路线:

Route::group(['domain' => '{element}.mysite.local'], function() {

    Route::get('{path}', 'ElementController@single')->where('path', '.*');

});

ElementController.php

public function single($element)
{
    //return view with information about my element
    if ( $element = Element::where('slug', $element)->first() )
    {
        return view('elements.single', compact('element'));
    }

    //redirect to mysite.local if slug doesn't exist
    return redirect(Config::get('app.url')); // points to config/app.php and find `url` parameter which should be defined in your `.env` file

}

TODO:

  • slug.mysite.local/sadsadas工作并运行上面的single方法,我 如果它会重定向到slug.mysite.local
  • ,则会更喜欢
  • 通配符子域仍无法正常工作

1 个答案:

答案 0 :(得分:0)

也许这个? 主机中的168.168.10.10 ......似乎必须是192.168.10.10