Laravel 子域端点不断重定向并出现 301 错误
Posted
技术标签:
【中文标题】Laravel 子域端点不断重定向并出现 301 错误【英文标题】:Laravel subdomain endpoint keeps redirecting with 301 error 【发布时间】:2020-12-11 18:56:57 【问题描述】:我有一个可用的 Laravel 应用程序,并引入了一个子域 (api.mysite.com) 来处理我的用户的编程访问。我在路由文件的顶部设置了一个路由组:
Route::group(['domain' => 'api.' . config('app.domain'), 'middleware' => 'api'], function ()
Route::get('/some-endpoint','APIController@someHandler');
);
这种安排在本地有效。
我在我的 DNS 记录中添加了一条 A 记录,指向我网站 IP 的 api
子域:
A Record api XX.XXX.XXX.XXX Automatic
问题是,当我在部署到生产环境时尝试访问 api.mysite.com/some-endpoint
时,站点会以 301 响应并尝试将我重定向到 mysite.com/some-endpoint
,它在我的路由文件中没有路由,因此会回复404.
【问题讨论】:
从我读到的这篇文章与 Laravel 路由无关,而是与您的服务器配置有关。也许您应该发布您的虚拟主机配置文件以及您使用的网络服务器。您可能没有 api 子域的虚拟主机。 我的 nginx 配置中的子域是否需要“服务器”条目? 这不是我的核心专业领域,但在服务器名称中指定它可能就足够了,例如server_name domain.tld api.domain.tld
。然后它应该同时处理两者。
感谢您为我指明正确的方向。这是我的 nginx 配置。为了完整起见,我将添加此问题的答案。
【参考方案1】:
我的 nginx 配置文件中存在问题。在server
部分我需要更改行
server_name mysite.com;
到
server_name .mysite.com;
见this related question。但是请注意,由 .mysite.com
等名称产生的通配符服务器名称查找比由 mysite.com www.mysite.com api.mysite.com
等明确定义的名称产生的通配符服务器名称查找要慢。
另见nginx documentation:
“.example.org”形式的特殊通配符名称可用于匹配确切名称“example.org”和通配符名称“*.example.org”。
【讨论】:
请注意,不鼓励使用通配符形式.mysite.com
。您应该将所有域明确地放在那里,即server_name mysite.com api.mysite.com
(参见nginx.org/en/docs/http/server_names.html#optimization)以上是关于Laravel 子域端点不断重定向并出现 301 错误的主要内容,如果未能解决你的问题,请参考以下文章