如何启用在子域中工作的 Laravel 应用程序来处理来自另一个子域的请求,而不更改浏览器中的 URL?

How to enable the Laravel app working in a subdomain to handle the requests from another subdomain, without changing the URL in the browser?

我的 Laravel 应用程序在 admin 子域中运行:

admin.mysite.com

我想让我的 Laravel 应用程序也能处理来自另一个子域的请求; client.mysite.com,例如。我正在尝试为此使用 Apache Rewrite 功能;因此,我在 "client" 子域的主目录中创建了以下 .htaccess 文件:

# file: /client/public/.htaccess
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^/?([a-zA-Z][a-zA-Z0-9]*)/?(.*)$  https://admin.mysite.com/bu// [L,NC]
</IfModule>

可行,但我绝对不希望在浏览器中更改 URL。为此,我尝试了 [P] flag 但没有成功。最后,我删除了 https:// 部分以避免重定向*:

RewriteRule ^/?([a-zA-Z][a-zA-Z0-9]*)/?(.*)$  admin.mysite.com/bu// [L,NC]

但是,我收到以下错误:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

如何修复错误并使其正常工作?而且,这是完成此类任务的正确方法吗? (它可以与 POST 一起使用吗?有没有更好的解决方案?)


* 如果您在 RewriteRule 中使用 https:// 启动 substitution 参数,它将导致重定向(就像外部使用 [R] 标志重定向)。这将导致浏览器发出新请求,从而更改地址栏中显示的 URL。

此外,请注意我的应用程序位于共享主机上,因此我可能无法访问某些低级功能。

client.mysite.comDOCUMENT_ROOT 设置为指向主 Laravel 应用程序所在的同一目录(在您的情况下,将其设置为 /admin/public)。然后使用 subdomain routing facility in Laravel; the subdomain may be specified by calling the domain() 方法:

Route::domain('client.mysite.com')->group(function () {
    Route::get('{username}', function ($username) {
        //
    });
});