Я пытаюсь перенаправить каждый запрос на один и тот же скрипт 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.
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 уже доступен в фиксированном / известном месте.