Я пытаюсь получить все запросы на: http://example.com/downloads/*
перенаправить на http://example.com/downloads/index.php
кроме случаев, когда запрошенный файл существует в /downloads/
пример:
http://example.com/downloads
=> /downloads/index.php
http://example.com/downloads/unknowfile
=> /downloads/index.php
http://example.com/downloads/existingfile
=> /downloads/existingfile
Моя текущая проблема заключается в том, что у меня либо перенаправление на 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;
}