Как запретить доступ к каталогу для всех расширений файлов, кроме нескольких

#nginx

#nginx

Вопрос:

Так же, как и в названии, я хочу запретить доступ для всех расширений файлов, кроме этих 8. У меня есть что-то вроде этого, но оно не работает должным образом.

     location ~* /uploads/ql/icons/.*.(?!(bmp|gif|tiff|jpeg|jpg|ppm|png|ico))$ {
       deny all;
    }

 

Ответ №1:

Ваше регулярное выражение не будет работать так, как вы ожидали. Попробуйте это:

 location ~* /uploads/ql/icons/.*.(?!bmp$|gif$|tiff$|jpeg$|jpg$|ppm$|png$|ico$) {
    deny all;
}
 

Однако это не будет блокировать доступ к файлам без какого-либо расширения вообще. Чтобы заблокировать и эти файлы, вам понадобится более сложное регулярное выражение:

 location ~* /uploads/ql/icons/(?:[^.] $|.*.(?!bmp$|gif$|tiff$|jpeg$|jpg$|ppm$|png$|ico$)) {
    deny all;
}
 

Существует также другой способ добавления второго location блока, см. Этот комментарий .

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

1. Это тоже работает не так, как ожидалось, я все еще могу извлекать ресурсы со всеми расширениями файлов.

2. Извините, я пропустил ~* модификатор. Исправлен ответ. Вы пробовали эти регулярные выражения с ним или без него?