2016-08-12 2 views
1

Я пытаюсь создать сценарий загрузки, который улавливает все запросы в/files/и заставляет загружать. Скрипт полностью работает и загружает любые файлы, которые я бросаю на него. Проблема заключается в том, что, когда я пытаюсь передать файл с расширением .php через try_files, следующие Nginx конфигурации путает:nginx: расширение php-файла не работает с try_files

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    listen 443 ssl; 
    listen [::]:443 ssl; 

    server_name _; 

    root /var/www/localhost/public_html/; 
    index index.php index.html index.htm index.txt; 


    location /files/ { 
     try_files $uri $uri/ /.thedownloadscript.php?file=$uri; 
    } 

    location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_param SCRIPT_FILENAME /public_html$fastcgi_script_name;  

    include fastcgi_params; 
    } 

    ssl_certificate /var/www/server.crt; 
    ssl_certificate_key /var/www/server.key; 
} 

/files/file.txt загружает файл.

/files/script.php бросает 404.

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

Я попытался удалить try_files из блока «location ~ .php $», но это делает его вывод «Нет указанного входного файла».

Я надеюсь, что кто-то может помочь мне здесь.

Заранее спасибо.

ответ

0

Любой блок местоположения регулярного выражения имеет приоритет над блоком расположения префикса на том же уровне, если последний не использует модификатор ^~.

Для получения более подробной информации см. this document.

Try:

location ^~ /files/ { 
    try_files $uri $uri/ /.thedownloadscript.php?file=$uri; 
} 

Обратите внимание, что location ^~ /files/ блок является расположение префикса (а не регулярное выражение место).

+0

Спасибо, это работает точно так же, как я хочу его. – Yani

0

Согласно Nginx передовой практики следует изолировать регулярное выражения местоположения:

location/{ 
    location ~ \.php$ { 
     ... 
    } 
} 

location /files/ { 
    try_files $uri $uri/ /.thedownloadscript.php?file=$uri; 
} 
Смежные вопросы