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

strange behaviour when using captured naming group to define alias

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

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/ 时,我在错误日志中有此 return:

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"

最后一个字母被删除...有人知道为什么吗?

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

因此,尽管这不能直接回答您的问题,但可行的替代配置可能是:

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

显然命名的捕获也可以。

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

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