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 错误的主要内容,如果未能解决你的问题,请参考以下文章

301 是“假”子域的正确重定向代码吗?

乘客(Ruby on Rails)中的301重定向从根域到www子域?

301从主域(www和非www)重定向到子域

如何重定向不存在的子域?

301重定向/所有图片到CDN

如果路由不在子域中,Laravel 子域路由重定向到 404