Я получаю 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$ не обрабатывает этот запрос правильно?
Спасибо.






Блок 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