Я пытался обслуживать несколько каталогов в одном месте, чтобы все файлы могли быть доступны в / sys / assets / - FILE - независимо от того, где физически находится файл в следующей папке
location /sys {
alias /var/www/website_api/sys/public;
try_files $uri $uri/ /sys/index.php$is_args$args;
location ~ \.php {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
}
location /sys/assets {
alias /var/www/website_api/sys/app/assets/javascripts/;
}
location /sys/assets {
alias /var/www/website_api/sys/app/assets/stylesheets/;
}
location /sys/assets {
alias /var/www/website_api/sys/app/assets/images/;
}
}
Цель:
/sys/assets/javascriptFile.js
/sys/assets/stylesheetFile.css
/sys/assets/image.png
В вашей конфигурации не может быть повторяющихся местоположений с префиксом. Однако можно сделать то, что вы ожидаете, используя try_files
директива:
location /sys {
alias /var/www/website_api/sys/public;
try_files $uri $uri/ /sys/index.php$is_args$args;
location ~ \.php {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
}
location ~ ^/sys/assets/?(.*)$ {
root /var/www/website_api/sys/app/assets;
try_files /javascripts/$1 /stylesheets/$1 /assets/images/$1;
}
}
Если вам абсолютно необходимо избавиться от несоответствующих поисков файловой системы (например, ядра stat()
вызовов под Linux), вы также можете сделать это более точно, используя несколько местоположений регулярных выражений, соответствующих подходящим расширениям файлов:
location /sys {
alias /var/www/website_api/sys/public;
try_files $uri $uri/ /sys/index.php$is_args$args;
location ~ \.php {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
}
location ~ ^/sys/assets/?.*\.css$ {
rewrite '^/sys/assets/(.*)$' '/$1' break;
root /var/www/website_api/sys/app/assets/stylesheets;
}
location ~ ^/sys/assets/?.*\.(gif|ico|jpe?g|png|svg)$ {
rewrite '^/sys/assets/(.*)$' '/$1' break;
root /var/www/website_api/sys/app/assets/images;
}
location ~ ^/sys/assets/?.*\.js$ {
rewrite '^/sys/assets/(.*)$' '/$1' break;
root /var/www/website_api/sys/app/assets/javascripts;
}
}
Если вам нужно обслуживать файлы из нескольких разных корней, попробуйте использовать именованные расположения.
location / {
root "E:\Directory1";
try_files $uri $uri/ @dir2;
index index.php;
autoindex on;
}
location @dir2 {
root "F:\Directory2";
index index.php;
try_files $uri $uri/ =404;
}
Установите автоиндекс на первом и 404 на последнем (как показано). Должен быть в состоянии связать столько, сколько вы хотите. Вы также можете сделать то же самое для своего .php
расположение.