@NkDev

Nginx. Как отдавать 404 при обращении к файлам .php?

Структура сайта такая:

/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 ?
  • Вопрос задан
  • 3200 просмотров
Пригласить эксперта
Ответы на вопрос 2
Skiphog
@Skiphog
Crutch developer
Скорее всего проблема в этой строчке
try_files $uri = /404.php;
Файла такого нет, поэтому происходит зацикливание.

Вам нужно либо добавить файл 404.php в корень и обработать ошибку там, либо исправить эту строчку на
try_files $uri =404
Ответ написан
PavelMonro
@PavelMonro
Надо посмотреть логи nxinx после обращения к php, и оттуда уже плясать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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