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

goo*_*ser 5 apache subdomain .htaccess laravel

我的 Laravel 应用程序在admin子域中工作:

admin.mysite.com
Run Code Online (Sandbox Code Playgroud)

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

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

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

RewriteRule ^/?([a-zA-Z][a-zA-Z0-9]*)/?(.*)$  admin.mysite.com/bu/$1/$2 [L,NC]
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,请使用“LimitInternalRecursion”来增加限制。使用“LogLevel debug”获取回溯。

如何修复错误并使其正常工作?而且,这是完成这样一项任务的正确方法吗?(它是否适用于 POST 和所有内容?有没有更好的解决方案?)


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

另外,请考虑我的应用程序在共享主机上,因此我可能无法访问某些低级功能。

som*_*One 6

设置DOCUMENT_ROOT你的client.mysite.com指向相同的目录,其中主要Laravel应用程序驻留(在你的情况下,将其设置为/admin/public)。然后利用Laravel 中的子域路由功能;可以通过调用domain()方法指定子域:

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