Laravel子域端点不断重定向并出现301错误

问题描述

我有一个可运行的Laravel应用,并引入了一个子域(api.mysite.com)来处理用户的程序化访问。我已经在路线文件顶部设置了路线组:

Route::group(['domain' => 'api.' . config('app.domain'),'middleware' => 'api'],function () {
    Route::get('/some-endpoint','APIController@someHandler');
});

此安排在本地有效。

我在DNS记录中添加一个A记录,将api子域指向了站点IP:

A Record    api    XX.XXX.XXX.XXX    Automatic

问题是,当我尝试访问部署到生产环境中的api.mysite.com/some-endpoint时,站点响应为301,并尝试将我重定向mysite.com/some-endpoint,该路由在我的路由文件中没有路由,并且因此会回复404

解决方法

该问题存在于我的Nginx配置文件中。在 <Route exact path="/" render={() => ( <StartScreen useVal={useVal} /> )} /> 部分,我需要更改行

server

server_name mysite.com;

请参见this related question。但是请注意,由诸如server_name .mysite.com; 之类的名称引起的通配符服务器名称查找要比由诸如.mysite.com之类的明确定义的名称所引起的查找慢。

另请参阅nginx documentation

以“ .example.org”形式出现的特殊通配符名称可以用于匹配确切名称“ example.org”和通配符名称“ * .example.org”。