在 Apache 服务器上部署应用程序时,我遇到了 Laravel 和 Livewire 的问题。当应用程序托管在子文件夹(例如,domain.com/folder_app)中时,就会出现问题。 @livewireScripts 生成的 Livewire 脚本创建的 URL 没有正确的子文件夹,导致脚本从根域而不是预期的子目录加载。
在开发中(使用 php artisanserve),一切正常,Livewire 脚本加载正确。然而,在生产中,在 Apache 服务器上,脚本生成为:
<script src="/livewire/livewire.js?id=38dc8241"
data-csrf="iaZPc0e8Qbpo4PdpXkbBO3GYx21de4hAuXXifar7"
data-update-uri="/livewire/update"
data-navigate-once="true"></script>
这指向domain.com/livewire/livewire.js,而不是domain.com/folder_app/livewire/livewire.js。
到目前为止我尝试过的:
在 .env 文件中设置 APP_URL 以包含子文件夹,如下所示:
APP_URL=https://example.com/folder_app
修改 config/livewire.php 以包含 asset_url:
return [
'asset_url' => env('LIVEWIRE_ASSET_URL', '/folder_app'),
];
将 LIVEWIRE_ASSET_URL=/folder_app 添加到 .env 文件。
use Illuminate\Support\Facades\URL;
public function boot()
{
if (config('app.env') !== 'local') {
URL::forceRootUrl(config('app.url'));
URL::forceScheme('https');
}
Livewire::setScriptRoute(function ($handle) {
return Route::get('/custom/livewire/livewire.js', $handle)->name('livewire.asset');
});
}
这个函数 Livewire::setScriptRoute() 帮助我正确设置了脚本 URL,但它没有修复返回 URL (data-update-uri="/livewire/update"),它也生成不正确。
使用 php artisan Route:clear、config:clear、cache:clear 等清除所有缓存
问题:
即使使用这些配置,Livewire 仍然会在 Apache 服务器上生成没有子文件夹的脚本 URL。在开发中,使用正确的 URL。当应用程序部署在 Apache 的子目录中时,我还需要配置什么才能让 Livewire 生成正确的脚本路径?
关于如何解决此路由问题有什么建议吗?
我现在也有同样的问题。当我将应用程序部署到域时,我遇到了这个问题。不使用 basepath/xx/liwewi,而只使用 baspath/liwewire/update