Laravel 12(XAMPP/Windows 10环境)storage:link无法创建符号链接及访问上传文件报403 Forbidden的问题求助
Laravel 12(XAMPP/Windows 10环境)storage:link无法创建符号链接及访问上传文件报403 Forbidden的问题求助
兄弟我太懂你这糟心情况了!Windows下用XAMPP跑Laravel,符号链接和权限问题简直是家常便饭,给你几个亲测有效的解决步骤,按顺序试应该能搞定:
一、先搞定storage:link无法创建的问题
Windows系统创建符号链接必须要管理员权限,这是绝大多数人踩的第一个坑:
- 找到你的命令行工具(CMD或者PowerShell),右键选择「以管理员身份运行」
- 用
cd命令切换到你的Laravel项目根目录 - 再执行
php artisan storage:link,这时候大概率能成功创建public/storage的符号链接了
如果还是不行,试试手动用系统命令创建:
- 同样以管理员身份打开CMD,执行:
比如你的项目在mklink /D "你的项目绝对路径\public\storage" "你的项目绝对路径\storage\app\public"C:\xampp\htdocs\laravel-shop,那命令就是:
这里的mklink /D "C:\xampp\htdocs\laravel-shop\public\storage" "C:\xampp\htdocs\laravel-shop\storage\app\public"/D参数是用来创建目录符号链接的,千万别漏了。
二、解决403 Forbidden的问题
如果已经有了符号链接但还是报403,大概率是Apache的配置或者文件权限的问题:
1. 检查Apache的符号链接允许配置
打开XAMPP控制面板里的Apache「Config」,选择httpd.conf,找到对应你项目public目录的<Directory>节点(如果没有就全局修改),确保配置里包含FollowSymLinks和正确的权限:
<Directory "C:/xampp/htdocs/你的项目名/public"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory>
修改完之后一定要重启Apache服务!
2. 检查文件和文件夹的权限
Windows下有时候Apache进程没有读取storage目录的权限:
- 右键点击
storage文件夹,选择「属性」→「安全」标签 - 点击「编辑」,添加
Authenticated Users或者Everyone用户,给他们读取和执行、列出文件夹内容、读取的权限 - 别忘了勾选「将所有子对象权限条目替换为此对象的可继承权限条目」,点击应用确认
3. 临时备选方案(迫不得已时用)
如果符号链接实在搞不定,可以在routes/web.php里加一个路由来直接返回文件:
Route::get('/storage/{path}', function ($path) { $filePath = storage_path('app/public/' . $path); if (!file_exists($filePath)) { abort(404); } return response()->file($filePath); })->where('path', '.*');
这样访问http://127.0.0.1:8000/storage/flyers/xxx.jpg就能直接读取文件了,不过这只是临时方案,还是建议搞定符号链接更规范。
最后再提醒一下,执行完这些操作后,可以再跑一遍php artisan config:clear和php artisan cache:clear,确保配置生效。
内容来源于stack exchange




