Laravel 8 asset()助手函数URL拼接异常:本地正常但Cpanel部署后出错
这问题我之前帮朋友排查过类似的,大概率是Laravel的配置或者Cpanel虚拟主机的设置出了问题,咱们一步步来解决:
检查
.env文件的APP_URL配置
这是最常见的原因!你需要确保.env里的APP_URL是准确的域名,不要带多余的子路径:APP_URL=https://akbooksnepal.acelogicnepal.com修改完成后,一定要在Cpanel的终端里执行配置缓存清除命令,不然Laravel会继续使用旧的缓存配置:
php artisan config:cache确认Cpanel虚拟主机的根目录设置
很多时候部署到Cpanel时,会不小心把网站的根目录指向了public_html/product(如果你的项目放在product文件夹下),但Laravel的public目录才是应该作为站点根目录的。你需要在Cpanel的“域名”或“虚拟主机”设置里,把域名对应的根目录修改为public_html/product/public(假设你的项目在product文件夹内)。
另外,检查public目录下的.htaccess文件是否是Laravel默认的版本,自定义的重写规则可能会干扰asset路径的解析。手动指定asset的基础URL
如果上面的方法都没生效,可以直接在config/app.php里配置asset_url,强制指定asset的前缀:'asset_url' => 'https://akbooksnepal.acelogicnepal.com',同样,修改后要执行
php artisan config:cache让配置生效。尝试添加路径前缀的斜杠
虽然本地正常,但可以试着把调用改成asset('/asset/script.js')(开头加斜杠),有时候服务器的环境变量解析问题会导致相对路径拼接错误,加斜杠可以强制从域名根目录开始解析。
你可以先从.env的APP_URL和配置缓存入手,这是最容易排查的点。如果还是有问题,可以检查Cpanel的站点根目录设置,或者查看服务器的环境变量是否正确传递给了Laravel。
内容的提问来源于stack exchange,提问作者Anup Shrestha

