проблема с правилами nginx + fpm;Файл не найден или сценарий загружен вместо выполнения - PullRequest
2 голосов
/ 29 октября 2019

Я рефакторинг очень старого приложения, и я застрял в конфигурации Nginx;Все мои попытки заканчивались тем, что скрипт PHP загружался вместо выполнения или заканчивался «Файл не найден»

Структура каталогов

public
│
└─── front
│   │   index.php
│   │   
│   │
│   └─── web_www.example.com
│       │   index.php
│       │   style.css
│       │   export/
            ...

ЦЕЛЬ

Все URL, кроме статических файлов (.js, .css ...), должны быть направлены на public/front/index.php

Пример:

Почему некоторые URL выглядят так, как будто онискрипт PHP должен быть выполнен? Потому что это старое приложение, которое работало так;Теперь только 1 фронт-контроллер (public/front/index.php) отвечает за выполнение кода

База, не работает vhost

server {
    ...

    root /srv/app/public/front;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args =404;
    }

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

    location ~* \.(js|css|bmp|png|jpg|jpeg|gif|swf|ico)$ {
        try_files $uri =404;
    }


    rewrite ^/(.*)$ /web_$http_host$uri break;
}

Что я делаюнеправильно / отсутствует, пожалуйста?

РЕДАКТИРОВАТЬ 1

Добавление файлов с пробами в расположение, как предложено @Florentin Stemate:

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

(Я изменил порядок и поместил $uri в конце, поэтому мы всегда пытаемся пройти через фронт-контроллер, когда URL содержит .php)

Это хорошо работает для всех страниц, кроме:

* 2 цикла перезаписи или внутреннего перенаправления при внутреннем перенаправлении на "/web_www.test-boutique.vm/web_www.test-boutique.vm / web_www.test-boutique.vm / web_www.test-boutique.vm / web_www.test-boutique.vm /....."

...