我一直在尝试在一个位置服务多个目录,以便所有文件都可以在/ sys / assets / – FILE上访问,而不pipe文件物理位置在以下文件夹中
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
您的configuration中不能有重复的前缀位置。 然而,这可以做到你所期望的使用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; } }
如果你绝对需要备份不适当的文件系统查找(例如Linux下的内核stat()调用),你也可以更准确地使用多个匹配合适的文件扩展名的正则expression式位置:
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; }
在第一个设置autoindex,最后一个设置404(如图所示)。 应该能够连锁尽可能多的,如你所愿。 你也可以为你的.php位置做同样的事情。