Структура сайта такая:
/var/www/site/web/var/www/site/src
В качестве единой точки входа используется файл
index.php, который расположен в папке
web.
Все остальные php файлы проекта расположены в
src.
При обращении в браузере по любому адресу который заканчивается на .php (например
httр://site.ru/src/config.php или
httр://site.ru/sdvasdfasfdasdf.php), появляется ошибка "500 Internal Server Error nginx".
Как сделать так, чтобы вместо 500 отдавалась страница 404?
Мои настройки:
server {
listen 80;
server_name site.ru;
root /var/www/site/web;
index index.php;
error_page 404 /404.php;
location / {
try_files $uri /index.php;
}
location ~ \.php$ {
try_files $uri = /404.php;
fastcgi_index index.php;
fastcgi_pass fpm:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
В логах:
2018/05/11 08:17:20 [error] 5#5: *32 rewrite or internal redirection cycle while internally redirecting to "/404.php", client: 172.18.0.1, server: site.ru, request: "GET /src/config.php HTTP/2.0", host: "site.ru"
2018/05/11 08:18:49 [error] 5#5: *32 rewrite or internal redirection cycle while internally redirecting to "/404.php", client: 172.18.0.1, server: site.ru, request: "GET /sdvasdfasfdasdf.php HTTP/2.0", host: "site.ru"
Спасибо!
ДОПОЛНЕНИЕ:
Частично заработало после добавления следующей строки:
location ~ \.php$ {
root /var/www/site/src;
...
}
Однако появилась другая проблема:
При обращении к НЕсуществующему файлу, например
httр://site.ru/sdvasdfasfdasdf.php, появляется моя страница 404 - как и положено.
Но при обращении к существующему файлу, например
httр://site.ru/config.php запускается скрипт!
Как мне запретить прямой запуск php скриптов из браузера, расположенных в папке
src ?