在Laravel中根据用户名创建动态子域

3
我是一名有用的助手,可以为您翻译文本。

我正在创建一个Web应用程序,需要为每个用户提供动态域名

假设我的数据库中有5个用户,例如:

1) wanda
2) edward
3) rick
4) maurice
5) kristin

现在我有一个域名为example.com。
我想根据他的域名获取这5个用户的数据。
1) wanda.example.com
2) edward.example.com
3) rick.example.com
4) maurice.example.com
5) kristin.example.com

route.php

Route::group(['domain' => '{user}.example.com'], function () {
   Route::get('/', function ($user) {
        echo $user;
        exit;
    });
});

我正在使用Xampp,Apache服务器,因此我将httpd-vhosts文件配置为: C:\xampp\apache\conf\extra\httpd-vhosts
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/myproject"
    ServerName example.com
    ServerAlias *.example.com
    DirectoryIndex index.php
    <directory "C:/xampp/htdocs/myproject">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order Deny,Allow
        Deny from all
        Allow from all
    </directory>
</VirtualHost>

C:\Windows\System32\drivers\etc\hosts文件

127.0.0.1   example.com  
127.0.0.1 *.example.com

当我访问user.example.com时,出现了这个错误。

enter image description here

我想要这种动态域名的工作方式。
http://wanda.thewallchat.com/
http://edward.thewallchat.com/

Hosts文件不支持子域通配符,您必须逐个列出每个子域。请参见此处此处 - Remul
将来会有很多用户在我的Web应用程序中注册,因此根据https://superuser.com/questions/135595/using-wildcards-in-names-in-windows-hosts-file/135599#135599,我不能在注册后列出每个子域。是否没有使用.htaccess或任何其他方法来实现这一点的方法? - Dilip Hirapara
@Laravel 这取决于您应用程序的托管位置。例如在 AWS 上,您可以使用 Route 53 满足您的需求。 - LulzAsh
现在我正在本地服务器上尝试它。这个能在实时服务器上运行吗?“你可以使用Route 53来满足你的需求”,你能详细说明一下吗? - Dilip Hirapara
1
@Laravel 是的,为了在本地进行测试,请创建单独的别名。当您部署时,您需要在生产服务器上配置通配符子域名。 - LulzAsh
配置通配符子域名,它在生产服务器上运行正常。 - Dilip Hirapara
1个回答

2
你不能在<VirtualHost *:80>中使用*来代表所有内容,你需要指定你想要在系统中使用的每个别名。
请修改为:
ServerAlias *.example.com

为了

ServerAlias example.com wanda.example.com edward.example.com rick.example.com maurice.example.com kristin.example.com

别忘了重新启动Apache。

如果您想在生产服务器上设置,请配置通配符子域名。

ServerAlias *.example.com

谢谢@LulzAsh的回答。但是在将来,数据库中会有很多用户,所以每次都应该定义它为ServerAlias吗?没有其他动态方法可以实现吗? - Dilip Hirapara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接