Назад | Перейти на главную страницу

NGINX: Primary script unknown - при вызове динамического URL с префиксом контроллера

Мы столкнулись с проблемой и не можем ее исправить. В настоящее время мы можем запустить наше приложение, как и ожидалось - URL-адрес SEO работает как шарм и переписывается на index.php. Проблема в том, что у нас есть дополнительный шаблон URL, например:

... который нам нужно переписать на index.php слишком. Мы не можем записать этот динамический URL-адрес, который заканчивается на .php. Обратите внимание, что нет физических файлов PHP, например. a-param.php -> это динамический паттерн, который заканчивается на .php. К сожалению, вывод в браузере File not found. Выполняется следующая ошибка nginx 1.10:

FastCGI отправил в stderr: «Первичный сценарий неизвестен» при чтении заголовка ответа из восходящего потока ...

-> 404 Не Найдено

Конфигурация NGNIX:

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

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

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Как переписать этот динамический URL, заканчивающийся на /controllerPrefix/*.php к index.php?

У вас есть два варианта:

Либо 1) перенаправить все URI, оканчивающиеся на .php к /index.php, если подходящего файла скрипта нет - добавить try_files заявление к существующим location ~ \.php$ блок (см. этот документ подробнее):

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

Или 2) перенаправить URI, которые начинаются с /controllerPrefixng к /index.php - добавить новый location блок (см. этот документ подробнее):

location ^~ /controllerPrefix/ {
    rewrite ^ /index.php last;
}