nginx служить индексным файлом из подпапок - PullRequest
1 голос
/ 26 февраля 2020

Я бы хотел обслуживать индексный файл из папки root и один из подпапки из root.

Мой nginx серверный сервер выглядит следующим образом:

server {

    listen       80;
    server_name  localhost;
    root /data/;
    index  index.html index.htm index.txt;

    location / {
    }

    location /a {
        alias   /data/a/;
    }

}

и моя структура каталогов выглядит следующим образом:

/data/:
a  index.txt

/data/a:
index.txt

Если я затем сделаю curl localhost, я получу содержимое файла /data/index.txt. Но curl /localhost/a дает мне 301. curl localhost/a/index.txt работает.

Почему я не могу получить доступ к своему index.txt с помощью curl /localhost/a?

Я попытался использовать root вместо alias в блоке location /a, а также попытался указать index.txt для местоположения /a, но безуспешно.

Я вижу похожие сообщения, например, Nginx конфигурация местоположения (подпапки) , но пока не могу найти ответ.

1 Ответ

0 голосов
/ 26 февраля 2020

Директива index работает с URI, которые заканчиваются на /:

Таким образом, URI / дает вам содержимое /index.txt, а /a/ дает вам содержимое `/ а / index.txt.

Если вы предоставляете Nginx с URI каталога (но без конечного /), поведение по умолчанию - перенаправление на тот же URI, но с конечным /.

Так работает директива index. Подробнее см. в этом документе .


Если вам нужно что-то, отличное от поведения по умолчанию, вам придется сделать это вручную, используя try_files. Подробнее см. в этом документе .

Например, чтобы вернуть содержимое файла index.txt, указав URI каталога без завершающего /, используйте:

root /data;

location / {
    try_files $uri $uri/index.txt =404;
}

Обратите внимание, что location /a { ... } блок не требуется ни в этом примере, ни в примере в вашем вопросе.

...