Перенаправление Nginx и подача из подпапки, если 403 - PullRequest
1 голос
/ 06 мая 2019

У меня есть каталог моего сайта следующим образом,

Sites
    - site 1
        index.html
    - site 2
        - docs
            index.html

Мне нравится настраивать сервер nginx таким образом, чтобы, если местоположение было /site1, оно должно было иметь сервер index.html, а если местоположение было site2, то оно должно пытаться, если есть какое-либо index.html, если оно не обслуживается. от docs/index.html. Я пытался получить это по-разному, один из которых, как,

server {
    listen       80;
    server_name courses.myserver.com;
    location /site1 {
        root /Sites/site 1;
        index index.html index.htm;
    }
    location /site2 {
        root /Sites/site2;
        try_files $uri $uri/ $uri/docs/;
        index index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Но он не делает то, что я должен делать.

1 Ответ

0 голосов
/ 06 мая 2019

Путь к файлу формируется путем объединения значения root со значением URI.Ваш URI уже содержит "site1", поэтому значение root не должно.Подробнее см. в этом документе .

Рассматривая структуру каталогов, вы, вероятно, можете использовать одно и то же значение root для всех ваших местоположений, и в этом случае вы должны поместить его в server блокировать и разрешать каждому location наследовать одно и то же значение.

Например:

root /Sites;
index index.html index.htm;

location /site1 {
}
location /site2 {
    ...
}

Директива index вызывается для URI, заканчивающихся /.Если вы хотите, чтобы index.html и docs/index.html были проверены на URI, заканчивающиеся на /, вы можете добавить специальный регистр в директиву index.

Например:

location /site2 {
    index index.html index.htm docs/index.html;
}

В качестве альтернативы, если вы хотите, чтобы docs/index.html был принят по умолчанию для любого URI, который иначе не соответствует файлу или индексу, добавьте URI по умолчанию в конец оператора try_files.Подробнее см. в этом документе .

Например:

location /site2 {
    try_files $uri $uri/ /site2/docs/index.html;
}
...