使用通配符 dns 自动为 laravel 应用程序创建子域

Automatically create a sub-domain for laravel application using wild card dns

我正在使用 laravel5.5 并且正在实施通配符 dns,为每个用户提供自己的子域。

在我的实施中,我正在使用 windows 10 和 laragon 服务器的笔记本电脑。

在laragon我是这样设置的

<VirtualHost *:80>
    DocumentRoot "C:/laragon/www/tindahan/public/"
    ServerName tindahan.local
    ServerAlias *.tindahan.local
    <Directory "C:/laragon/www/tindahan/public/">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

在主机文件上

127.0.0.1      tindahan.local       
127.0.0.1      fil.tindahan.local   
127.0.0.1      liz.tindahan.local     

在路上

Route::get('/', function () {
  $url       = parse_url(url()->current());
  $domain    = explode('.', $url['host']);
  $subdomain = $domain[0];

  dd($subdomain);
});

所以当访问fil.tindahan.local或liz.tindahan.local时,我得到了结果

filLiz

但是如果我访问 joseph.tindahan.local 我得到了这个错误

This site can’t be reached

我需要在主机上创建另一个子域才能使其正常工作。

问题是,如何自动完成?

当我输入任何名称作为子域时,它应该会自动创建,这样我就永远不会手动创建了?

据我所知,错误将在网络层解决,而不是从应用层解决(在本例中 laravel)。

我认为您需要自己的本地 DNS 服务器。

我在 Linux (ubuntu) 中使用了 dnsmasq,并且效果很好。

步骤:

  1. apt install dnsmasq
  2. 用编辑器打开 /etc/dnsmasq.conf
  3. 添加 address=/your_domain.loc/127.0.0.1(这只是一个示例,因此您可能需要更改 domainip)。
  4. 运行 sudo systemctl restart dnsmasq 重启服务。
  5. 好吧,您可以在浏览器中测试来自 your_domain.loc 的任何 url,您将不会收到该错误 ;)

祝你好运