Laravel Livewire 脚本部署在 Apache 服务器上的子文件夹中时出现 URL 问题

问题描述 投票:0回答:1

在 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 生成正确的脚本路径?

关于如何解决此路由问题有什么建议吗?

laravel-livewire laravel-11
1个回答
0
投票

我现在也有同样的问题。当我将应用程序部署到域时,我遇到了这个问题。不使用 basepath/xx/liwewi,而只使用 baspath/liwewire/update

© www.soinside.com 2019 - 2024. All rights reserved.