我想要实现的是从URL中删除/ storage,以便最终将其为www.example.com/images/x.jpg
,而不是默认的www.example.com/storage/x.jpg
。
我尝试像这样从url
的{{1}}删除/ storage:
config/filesystems.php
,但是它不起作用。我认为问题在于,没有前缀的文件将被视为公用文件夹中的文件。
是否有可能实现我想要达到的目标?
答案 0 :(得分:1)
实现此目的的最佳方法是添加新的images
磁盘。这样,可以有选择地应用新的网址格式,并且不会干扰您现有的任何代码。
将磁盘添加到 config / filesystems.php :
'images' => [
'driver' => 'local',
'root' => storage_path('app/public/images'),
'url' => env('APP_URL') . '/images',
'visibility' => 'public',
],
这是您save file uploads到新磁盘的方式:
$request->file('image')->storeAs(/* path */ '/', /* filename */ 'x.jpg', /* disk */ 'images')
这是您创建类似于http://example.com/images/x.jpg
的图像的链接的方法:
Storage::disk('images')->url('x.jpg')
现在您可以创建指向这些图像的链接,因此必须确保服务器可以找到它们。您有多种选择。
在公共目录中创建符号链接,这是Laravel的默认public
磁盘(/storage
)的工作方式。
$ ln -s /var/www/example.com/storage/app/public/images /var/www/example.com/public/images
在Laravel应用程序中创建一条路线以提供图像。
Route::get('images/{file}', function ($file) {
return Storage::disk('images')->response($file);
// return Storage::disk('images')->download($file);
});
在您的网络服务器中创建重写规则。
在nginx中,它可能看起来像这样:
location /images/ {
root /var/www/example.com/storage/app/public/;
}
在Apache中,您可以使用alias:
Alias "/images" "/var/www/example.com/storage/app/public/images"