Как переписать, если файл не найден с помощью NGINX - PullRequest
6 голосов
/ 07 мая 2011

Я использую NGINX на сервере Ubuntu. У меня есть этот vhost:

server {
        listen        80;
        server_name   *.example.com;
        root          /home/nginx/vhosts/example.com/web;

        location / {
                index     index.php;
        }

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9001;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        /etc/nginx/fastcgi_params;
        }
}

Я должен добавить правило ...

Если файл / dir НЕ НАЙДЕН, используйте index.php

Как я могу изменить директиву server {}?

Спасибо!

Ответы [ 4 ]

12 голосов
/ 07 мая 2011

Вы можете использовать директиву try_files:

try_files $uri $uri/ /index.php

Сначала попытается найти файлы и каталоги, а если это не сработает, будет использован index.php.

См. Также раздел front controller на вики nginx.

5 голосов
/ 23 марта 2015

Ikke верен, используйте try_files примерно так:

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

Но ваше местоположение в PHP fastcgi небезопасно. См. эту статью , чтобы узнать больше об этом.

Для вашей настройки вам нужно что-то вроде этого:

location ~ \.php$ {
    try_files $uri /index.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;

    include /etc/nginx/fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass 127.0.0.1:9001;
}

Обратите внимание, что вы должны установить локальный fastcgi_param после включения глобальной конфигурации fastcgi_params.

2 голосов
/ 31 марта 2012

Вам нужно изменить настройки:

server {
    listen        80;
    server_name   *.example.com;
    root          /home/nginx/vhosts/example.com/web;

    location / {
            index     index.php;
    }

    location ~ \.php$ {
            root /home/nginx/vhosts/example.com/web;
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        /etc/nginx/fastcgi_params;
    }
}

надеюсь, вам поможет

1 голос
/ 05 декабря 2012

У меня была такая же проблема на RH6 на EC2, и я исправил ее жестким кодированием $document_root в параметре fastcgi_param.Надеюсь, это помогло.

...