Laravel 子域路由 - NotFoundHttpException

Laravel subdomain route - NotFoundHttpException

我正在 Laravel 项目中处理 API,但在设置子域 (Ubuntu) 时遇到问题。

我设置了VirtualhostRouting,启用了vhost_alias

虚拟主机:

<VirtualHost *:80>
ServerName domain.io
ServerAlias domain.io
DocumentRoot mypath

<Directory mypath>
            AllowOverride All
            Order allow,deny
            Allow from all
    </Directory>

</VirtualHost>
<VirtualHost *:80>
ServerName api.domain.io
ServerAlias api.domain.io
DocumentRoot mypath

<Directory mypath>



            AllowOverride All
            Order allow,deny
            Allow from all
    </Directory>

</VirtualHost>

我的路线:

Route::group(['domain' => 'api'.env('APP_HOST')], function() {

    Route::get('test', function() {
        return 'test';  
    });

});

Url http://api.domain.io/ 重定向到主域 domain.io。当我访问我的路线 http://api.happs.io/test 时出现错误(好像没有那条路线):

NotFoundHttpException in RouteCollection.php line 161:

ServerAlias 上的域名前添加 *. 并确保您有通配符 CNAME。

<VirtualHost *:80>
    ServerName domain.io
    ServerAlias *.domain.io
    DocumentRoot mypath

    <Directory mypath>
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

试试这个,将域和子域放在名称服务器中:

<VirtualHost *:80>
ServerName domain.io api.domain.io
DocumentRoot mypath

<Directory mypath>
            AllowOverride All
            Order allow,deny
            Allow from all
    </Directory>

</VirtualHost>

您的 hosts 文件是正确的。问题是您的 env('APP_HOST') 是一个静态值,但它需要根据您的设置动态变化。

一个选项,可能是最简单的方法(我也使用过),就是手动为子域创建一个路由。

Route::group(['domain' => 'api.happs'], function() {
    // Do something
});