Laravel 8.60.0执行php artisan storage:link生成文件而非软链接/文件夹
问题根因
这是WSL2跨Windows文件系统创建符号链接的兼容性问题,不属于Laravel内部配置错误。
如果你的Laravel项目存放在WSL2的Windows挂载目录(路径为/mnt/c/、/mnt/d/这类前缀),WSL2默认挂载参数不支持Linux侧生成的符号链接被Windows侧的IDE、资源管理器正确识别,执行php artisan storage:link时生成的符号链接就会被识别为普通文件。
解决方案
最优方案(推荐)
将项目迁移到WSL2原生Linux文件系统路径下(即/home/你的用户名/前缀的路径),不要放在Windows挂载目录。重新部署项目后执行php artisan storage:link,生成的符号链接即可被正常识别为目录,同时还能大幅提升WSL2下项目的读写性能。
兼容方案(必须存放在Windows目录时使用)
- 在WSL2终端执行命令打开挂载配置文件:
sudo nano /etc/wsl.conf - 写入以下配置:
[automount] options = "metadata,umask=22,fmask=11" mountFsTab = false
- 保存文件后退出,在Windows终端执行
wsl --shutdown重启WSL实例 - 回到项目目录先删除已经生成的错误文件:
rm public/storage - 重新执行
php artisan storage:link即可正常生成可识别的符号链接
验证方法
在WSL2终端项目根目录执行ls -la public/,正常的符号链接会显示类似storage -> /你的项目路径/storage/app/public的标识,说明链接创建成功。
如果你是在Sail容器内执行的php artisan storage:link命令,需确保容器内的项目路径映射和WSL侧的路径一致,避免出现路径错位导致链接失效。
内容的提问来源于stack exchange,提问作者runtimeTerror
相关产品推荐
相关产品推荐

