NGINX - Перенаправить все в скрипт php

Я ' m пытается перенаправить каждый запрос одному и тому же скрипту php.

Я придумал такую ​​конфигурацию:

server {
    listen 80;
    server_name example.com;

    root /var/www/html;

    index api.php;

    location / {
        try_files $uri /api.php$is_args$args;
    }

    location ~ \.php {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index api.php;
        fastcgi_pass 127.0.0.1:9000;
    }
}

Хотя она работает, она по-прежнему позволяет прямой доступ к ресурсам, если указан правильный $ uri.

Если я попытаюсь изменить первый блок местоположения на этот:

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

Он не работает, всегда возвращает 404.

2
задан 6 January 2017 в 21:18
1 ответ
server {
    server_name example.com;

    root "/var/www/html";

    location / {
        include "fastcgi_params";
        fastcgi_param SCRIPT_FILENAME $document_root/api.php;
        fastcgi_param SCRIPT_NAME api.php;
        fastcgi_index api.php;
        fastcgi_pass 127.0.0.1:9000;
    }
}

Если цель состоит в том, чтобы переадресовать все запросы одному сценарию PHP и если этот единственный сценарий PHP известен заранее по его имени, то нам не нужен отдельный блок местоположения. Достаточно только одного блока местоположения, который отправляет все запросы этому известному сценарию PHP.

fastcgi_split_path_info не требуется, когда сценарий PHP, который нужно выполнить, заранее неизвестен и доступен только как часть URI.

Кроме того, try_files $ uri = 404 не требуется, поскольку этот известный сценарий PHP уже доступен в фиксированном / известном месте.

1
ответ дан 3 December 2019 в 12:37

Теги

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