Задать вопрос
@FIGPlaton

Как в Nginx запретить доступ ковсем PHP-файлам, кроме 2-х нужных в поддеррикториях?

Здравствуйте. Кто подскажет, как написать для nginx правила, которые запрещали бы доступ к любым файлам \.(php|cgi|pl|phtml) в директории, допустим, /dir/apdir/, но разрешали бы доступ к 2-м PHP файлам во вложенных папках?
Чтобы вопрос был более понятен, приведу пример:
Если нужно разрешить доступ только к одному файлу, конструкция получается следующая:
location ~ ^/dir/apdir/.+\.(php|cgi|pl|phtml)(?<!subdir/index\.php) {
	deny all;
}

Доступ ко всем файлам php|cgi|pl|phtml в папке /dir/apdir/ и вложенным подпапкам, за исключением файла /dir/apdir/subdir/index.php , запрещен.

Тут все понятно (или есть более элегантное решение?).

А вот если есть два PHP файла, к которым нужно разрешить доступ, например:
/dir/apdir/subdir/index.php
/dir/apdir/js/idexfile/file.php
Вот тут - пока тупик... Двойной просмотр назад не работает :
location ~ ^/dir/apdir/.+\.(php|cgi|pl|phtml)((?<!subdir/index\.php)|(?<!js/idexfile/file\.php)) {
  deny all;
}

Так не работают правила.
И если сначала разрешить доступ к нужным файлам, а потом запретить ко всем остальным - так же не работет:
location ~ ^/(dir/apdir/subdir/index|dir/apdir/js/idexfile/file)\.php {
	allow all;
}

location ~ ^/(dir/apdir)/.+\.(php|cgi|pl|phtml) {
	deny all;
}

Как быть в таком случае?
  • Вопрос задан
  • 2564 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Softer
@Softer
Через белый список.

location ~* ^(file1|file2)\.php {
    # FastCGI here
}
location ~* \.php {
    deny all;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы