Это должно быть базовым ... Я новичок, и никакие поисковые запросы и обмен стеками не помогают.
У меня есть веб-сайт, на котором я хочу размещать изображения из разных каталогов. Я думаю, что самый простой способ сделать это - сопоставить что-то вроде website.com/i/image.jpg с папкой в корневом каталоге / i /, поместить туда изображения и покончить с этим. Так что-то вроде этого должно работать, не так ли?
location /i/ {
/i/$uri;}
Не знаю, мне очень сложно понять синтаксис nginx. Но я также хочу, чтобы URL-адрес был как можно короче, и я считаю, что мог бы реализовать некоторую причудливую логику с регулярным выражением, где я могу вызывать изображения из / i /, не вмешиваясь в изображения, которые вызываются из корневого каталога или других папок. Но я просто озадачен синтаксисом.
Я видел в некоторых других сообщениях на stackexchange людей, пытающихся захватить строку, и понял, что если я сделаю все имена изображений соответствующими определенному шаблону, я могу атаковать его с помощью местоположения регулярного выражения, которое должно совпадать в 100% случаев, поэтому я Можно сделать URL-адрес коротким и по-прежнему отделять изображения от тех, которые мне не нужны (я бы объяснил их различие в назначении, но я чувствую, что это не по теме).
Во всяком случае, я видел сообщение с
location ~ "^/s/([0-9a-zA-Z]{4,6})$" {...
и понял, что это может быть близко к тому, что мне нужно. Все мои файлы для этого местоположения будут иметь длину 6 символов, только a-z, с любым расширением. Я думал, что это будет просто, и могу сделать что-нибудь вроде
location ~ "^([a-z]{6})$" {...
Но как бы я ни ковырялся с синтаксисом, я просто не могу заставить его работать. Может ли кто-нибудь пролить свет на это?
Вы можете попробовать что-то вроде этого
server {
listen 8989;
server_name www.example.net;
root /vhosts/www.example.net/public_html;
location ~ "^/([a-z]{6})(.*)\.(jpg|png|svg)$" {
root /vhosts/www.example.net/static;
}
}
И загрузите все изображения в /vhosts/www.example.net/static. С настройками выше
www.example.net/qwerty/test.png будет переведен -> /vhosts/www.example.net/static/qwerty/test.png
Это мое предложение, основанное на ALex_hha
ответ и подробности в farfie
комментарий выше.
server {
listen 8989;
server_name www.example.net;
root /vhosts/www.example.net/public_html;
location ~ "^/([a-z]{6})(.*)\.(jpg|png|svg)$" {
rewrite ^/([a-z]{6})(.*)\.(jpg|png|svg)$" /vhosts/www.example.net/static/$1$2.$3;
}
}
Ключ к использованию nginx rewrite
директива для захвата важных частей из URI, чтобы его можно было сопоставить с любым каталогом.
В root
Директива изменяет только корень документа, а URI добавляется к корню документа как есть, что в данном случае не то, что вам нужно.