使用捕获的命名组定义别名时的奇怪行为

时间:2016-10-04 15:51:13

标签: nginx nginx-location

我有一个非常简单的虚拟主机配置:

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:/ var / www / data-test1-front和/ var / www / data-test2-front

当我在浏览器中尝试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"

删除了最后一封信......有人知道为什么吗?

2 个答案:

答案 0 :(得分:1)

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

所以,虽然这并没有直接回答你的问题,但是一个可行的替代配置可能是:

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

显然,命名的捕获也会起作用。

答案 1 :(得分:0)

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

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