从Laravel图片网址中删除“存储”

时间:2019-02-08 09:06:42

标签: php laravel nginx

我已将一张图像上传到服务器,除了我需要在URL中添加storage以便从Laravel的公共目录访问图像之外,其他所有操作均已正确设置。

https://example.com/a/xyz.png-无法访问

https://example.com/storage/a/xyz.png-可以访问

但是在本地,可以访问没有存储的URL。

NGINX

root /var/www/example.in/live/public/;
index index.html index.php index.htm index.nginx-debian.html;
server_name example.in www.example.in;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}

location ~ /\.ht {
        deny all;
}

这不是我需要从URL隐藏存储单词的问题。我的问题是图像的URL默认情况下应该在没有存储字的情况下工作。它不起作用。在我的本地计算机上,由代客管理的相同代码在没有存储关键字的情况下可以正常工作

1 个答案:

答案 0 :(得分:2)

事情是,执行命令php artisan storage:link应该位于该位置(即public_path('storage'))。这是默认行为。您可以通过以下方式手动链接到所需位置:

ln -s /absolute/path/to/project_root/storage/app/public /absolute/path/to/project_root/public/wanted-name-of-directory

或使用自定义命令扩展本机命令。对于后一种解决方案,请遵循this answer中的逻辑。应该是这样的:

  1. php artisan make:command CustomStorageLinkCommand

  2. 然后从新创建的文件中删除所有文件并使用此代码:

<?php

namespace App\Console\Commands;

use Illuminate\Foundation\Console\StorageLinkCommand;

class CustomStorageLinkCommand extends StorageLinkCommand
{
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a symbolic link from "public/a" to "storage/app/public"';

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function handle()
    {
        if (file_exists(public_path('a'))) {
            return $this->error('The "public/a" directory already exists.');
        }
        $this->laravel->make('files')->link(
            storage_path('app/public'), public_path('a')
        );
        $this->info('The [public/a] directory has been linked.');
    }
}
  1. 执行php artisan storage:link命令