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

Nginx перенаправляет все запросы, которые не соответствуют файлу, в файл php

Я пытаюсь получить все запросы на: http://example.com/downloads/* перенаправить на http://example.com/downloads/index.php кроме случаев, когда запрошенный файл существует в /downloads/

пример:

Моя текущая проблема заключается в том, что у меня либо перенаправление на php работает, но статические файлы не обслуживаются, либо наоборот.

Вот мой текущий vhost conf: (который перенаправляет нормально, но статические файлы отправляются на php и терпят неудачу)

server {
    listen   80; ## listen for ipv4; this line is default and implied
    server_name domain.com;
    root /data/www;
    index index.php index.html;

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

    error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/www;
    }

    location ^~ /downloads {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index index.php;
        include fastcgi_params;
        try_files $uri @downloads;
    }

    location @downloads {
        rewrite ^ /downloads/index.php;
    }

    # pass the PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Точность: статические файлы - это символические ссылки, созданные /downloads/index.php

Изменить: возможно дублировать, но мне кажется, что это решение не работает.

Используйте index.php в качестве настраиваемой страницы ошибок в месте загрузки (и не отправляйте заголовок 404):

location ^~ /downloads {
 ...
 fastcgi_intercept_errors on;
 error_page 404 =200 /downloads/index.php;

}