Как открыть папку с изображениями и получить к ним доступ по маршруту?

#laravel #nginx #laravel-7

Вопрос:

У меня есть список флагов, расположенных по адресу :

/home/bheng/app/public/assets/be/img/flags/

 ...

-rw-r--r-- 1 robot robot  4655 Apr 29 16:34 tf_64.png
-rw-r--r-- 1 robot robot  3024 Apr 29 16:34 td_64.png
-rw-r--r-- 1 robot robot  5379 Apr 29 16:34 tc_64.png
-rw-r--r-- 1 robot robot  5316 Apr 29 16:34 sz_64.png
-rw-r--r-- 1 robot robot  3486 Apr 29 16:34 sy_64.png
-rw-r--r-- 1 robot robot  4902 Apr 29 16:34 sx_64.png
-rw-r--r-- 1 robot robot  3508 Apr 29 16:34 sv_64.png
-rw-r--r-- 1 robot robot  3986 Apr 29 16:34 st_64.png
-rw-r--r-- 1 robot robot  4290 Apr 29 16:34 ss_64.png
-rw-r--r-- 1 robot robot  3765 Apr 29 16:34 sr_64.png
-rw-r--r-- 1 robot robot  3856 Apr 29 16:34 so_64.png
-rw-r--r-- 1 robot robot  3580 Apr 29 16:34 sn_64.png
-rw-r--r-- 1 robot robot  4959 Apr 29 16:34 sm_64.png
-rw-r--r-- 1 robot robot  3077 Apr 29 16:34 sl_64.png
-rw-r--r-- 1 robot robot  4483 Apr 29 16:34 sk_64.png
-rw-r--r-- 1 robot robot  3517 Apr 29 16:34 sj_64.png
-rw-r--r-- 1 robot robot  3483 Apr 29 16:34 si_64.png
drwxr-xr-x 2 robot robot 12288 Apr 29 16:34 .
┌──[robot@world]──[/home/bheng/app/public/assets/be/img/flags] 
└── 
 

введите описание изображения здесь

Я хочу загрузить это изображение при посещении

 https://www.bunlongheng.com/flags/*
 

Экс.

 https://www.bunlongheng.com/flags/sn_64.png
 

Я попытался добавить эту строку в свой nginx

 location ^~ /flags/ {
    root /home/bheng/app/public/assets/be/img/flags/;
}
 

Я все еще получаю 404 по своему URL : https://www.bunlongheng.com/flags/sn_64.png

Что же упустил?


Также

Я пытался alias

 location /flags/ {

    alias /home/bheng/app/public/assets/be/img/flags/;
    #root /home/bheng/app/public/assets/be/img/flags/;
}
 

Комментарии:

1. есть два варианта: во-первых, вы можете поместить их в хранилище и с помощью хранилища:ссылка, во-вторых: вы можете использовать webpack для копирования ресурсов из ресурсов/активов/изображений в общедоступные/активы/изображения.

2. Как я могу заставить его работать, не перемещая папки? Вся моя структура проекта /assets/ уже существует, и я хотел бы сохранить ее такой.

3. Обратите внимание, если я помещу полный маршрут работ : bunlongheng.com/assets/be/img/flags/si_64.png

4. это не стандартный способ, если вы посмотрите на laravel, все они следуют этим решениям. Если у вас есть CI/CD, единственное, что вам нужно, — это просто скопировать из ресурсов в общедоступные без необходимости изменять конфигурацию nginx.

5. для локальной разработки вы также можете использовать символическую ссылку!

Ответ №1:

Вам нужно rewrite вместо alias :

 location ~ /assets/be/img/flags/(?<filename>. )$ {
    rewrite ^ /flags/$filename last;
}
 

или другим способом, возможно, вам следует использовать root:

 location ~ /flags/ {
    root /assets/be/img/flags/;
}
 

но нужно использовать оба способа php artisan storage:link , потому что это должен быть общедоступный путь nginx.

Комментарии:

1. Мне нравится 2-й, все еще 404 bunlongheng.com/flags/si_64.png