2016-10-04 49 views
0

我有一个很简单的虚拟主机的配置:奇怪的行为使用所拍摄的命名组时定义别名

server { 
    listen 80 default_server; 
    server_name datavis.dev.localserver.fr; 

    root /var/www; 

    location ~ ^\/datavis\/(?<datarep>[\w]+) { 
     alias /var/www/data-${datarep}-front; 
     autoindex on; 
    } 

}

我有2只显示目录2周的index.html:/无功/网络/ DATA- test1的前方和/ var /网络/数据test2的前期

当我尝试在我的浏览器http://datavis.dev.localserver.fr/datavis/test1/我有这个回报率在错误日志:

2016/10/04 17:36:43 [error] 4614#4614: *1 opendir() "/var/www/data-test1-fron" failed (2: No such file or directory), client: 192.168.56.1, server: datavis.dev.localserver.fr, request: "GET /datavis/info/ HTTP/1.1", host: "datavis.dev.localserver.fr" 

最后一封信被删除...有谁知道为什么?

回答

0

您的别名不以/结尾,但autoindex需要它并从路径中除去最后一个字符。 index index.html也不会工作,因为结果路径将是/var/www/data-test-frontindex.html。所以,你需要的是增加/

location ~ ^\/datavis\/(?<datarep>[\w]+)/ { 
    alias /var/www/data-${datarep}-front/; 
    autoindex on; 
} 
+0

谢谢非常 ! –

1

虽然没有明确指出,但是当在正则表达式位置中包含时,the example in the manual显示在alias语句上构造的整个URI。

所以,尽管这并不直接回答你的问题,工作可选配置可能是:

location ~ ^/datavis/(\w+)(.*)$ { 
    alias /var/www/data-$1-front$2; 
    autoindex on; 
} 

显然命名捕获将工作太。

+0

谢谢,是的,它的工作原理:), 我只是想太知道为什么我不得不添加第二个捕获组,看起来像一个错误给我 –