Nginx - php подкаталога возвращает 404

Я получаю 404 ошибки на php-страницах из подлокации моего хоста. Моя конфигурация:

server {
    listen 80;
    root /var/www/html/nisite;
    index  index.php index.html index.htm;
    server_name  www2.company.com wp-newsite-stg-02.company.com;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
    fastcgi_split_path_info  ^(.+\.php)(/.+)$;
    fastcgi_index            index.php;
    fastcgi_pass             unix:/var/run/php/php7.2-fpm.sock;
    include                  fastcgi_params;
    fastcgi_param   PATH_INFO       $fastcgi_path_info;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

  # =================================

    location /office {
        root /var/www/html/oldsite;
    }

}

Когда я захожу на http://www2.company.com/office, я вижу страницу, все статические ресурсы также обслуживаются, но когда я пытаюсь получить доступ к http://www2.company.com/office/php/form-process.php, я получаю ошибку 404.

почему location ~ \.php$ не обрабатывает этот запрос правильно?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
694
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Блок location наследует значение $document_root от оператора root в окружающем блоке. Вы запускаете PHP-скрипты из двух разных корней, поэтому вам нужны два отдельных блока location для их обработки.

Решение состоит в использовании вложенного блока location.

Например:

location ^~ /office {
    root /var/www/html/oldsite;

    location ~ \.php$ {
        try_files      $uri =404;
        fastcgi_pass   unix:/var/run/php/php7.2-fpm.sock;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $request_filename;
    }
}

Используйте модификатор ^~, чтобы убедиться, что правильный location обрабатывает .php файлы. Подробнее см. в этот документ. Используйте оператор try_files, чтобы избежать передача неконтролируемых запросов в php

Другие вопросы по теме