@Ad4ptec

Как задать всем файлам в директории 404 ошибку?

Изначально нужно было изменить папку путем редиректов. Код который приведен ниже работает, но необходимо чтобы все файлы в директории /old/ отдавали 404 ошибку, а в директории /files/ все файлы были доступны.
set $domain $host;
	# делаем доступными php файлы из /old/
	location ~ ^/files/(.*\.php)$ {
		root /home/$domain/html/old/$1;
		try_files $uri @php;
		include fastcgi_params;
		fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
		fastcgi_index index.php;
	}
	# остальные файлы из /old/
	location ~ ^/files($|/.*) {
		root /home/$domain/html/old$1;
	}
	location @php {
		rewrite ^/files/(.*)$ /old/$1 last;
	}

Пробовал код ниже, не работает.
location ~ ^/old($|/.*) {
		if ($remote_addr != 127.0.0.1) {
			return 404;
		}
	}

Проблему наверняка можно решить проксированием apache, но это самый крайний вариант, т.к лишняя нагрузка на сервер не нужна. Подскажите кто сталкивался с подобными ситуациями, поделитесь опытом, я буду очень благодарен.

Полный серверный конфиг:
server {
	server_name "~^www\.(.*)$" ;
	return 301 $scheme://$1$request_uri ;
}
server {
    listen 8080;
	listen 80 default;
	server_name _;
	set $domain $host;
	root /home/$domain/html;
	server_name_in_redirect off;
	set_real_ip_from   199.27.128.0/21;
	set_real_ip_from   173.245.48.0/20;
	set_real_ip_from   103.21.244.0/22;
	set_real_ip_from   103.22.200.0/22;
	set_real_ip_from   103.31.4.0/22;
	set_real_ip_from   141.101.64.0/18;
	set_real_ip_from   108.162.192.0/18;
	set_real_ip_from   190.93.240.0/20;
	set_real_ip_from   188.114.96.0/20;   
	set_real_ip_from   197.234.240.0/22;
	set_real_ip_from   198.41.128.0/17;
	set_real_ip_from   162.158.0.0/15;
	set_real_ip_from   104.16.0.0/12;
	set_real_ip_from   2400:cb00::/32;
	set_real_ip_from   2606:4700::/32;
	set_real_ip_from   2803:f800::/32;
	set_real_ip_from   2405:b500::/32;
	set_real_ip_from   2405:8100::/32;
	real_ip_header     CF-Connecting-IP;
	real_ip_recursive on;
	
	if (!-d /home/$domain/html) {
		return 444;
	}
	
	location ~ ^/files/(.*\.php)$ {
		alias /home/$domain/html/old/$1;
		try_files $uri @php;
		include fastcgi_params;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
		fastcgi_index index.php;
	}
	location ~ ^/files($|/.*) {
		alias /home/$domain/html/old$1;
	}
	location @php {
		rewrite ^/files/(.*)$ /old/$1 last;
	}
    location ~ \.php$ {
		if ($request_uri = /index.php) {
			rewrite ^ $scheme://$domain? permanent;
		}
		try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
    }
}
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
m3a1
@m3a1
www.nixys.ru
В целом, для решения Вашего вопроса должно быть достаточно кода:
location ~* ^/old/ {
  return 404;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Soldata
@Soldata
Программист, владелец IT-компании.
Не файлы отдают ошибки, а сервер. Запретите доступ к папке в .htaccess
Ответ написан
Комментировать
@Ad4ptec Автор вопроса
Олег Солдатов, нет такого файла, сервер работает на nginx.

Разобрался, Алексей Тен был прав, вся проблема была в rewrite. В файле конфигурации fastcgi_params был неправильно прописан путь к скриптам, поэтому в пути к скрипту ставился двойной слеш.
В результате получаем верное решение:
set $domain $host;
  # делаем доступными php файлы из /old/
  location ~ ^/files/(.*\.php)$ {
    alias /home/$domain/html/old/$1;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
  }
  # остальные файлы из /old/
  location ~ ^/files($|/.*) {
    alias /home/$domain/html/old$1;
  }
  location ~* ^/old/ {
    return 404;
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы