Задать вопрос
SkaN2412
@SkaN2412
Программист, но хороший человек.

Почему Location в location'е утверждает, что его параметр находится вне родительской папки?

server {
    listen 80;

    server_name localhost.dev;

    location /89262207055 {
        root /89262207055/;

        location /file {
            alias index.php?id=file&name=;
        }

        rewrite ^(.*).html$ index.php?id=block&block=$1;
    }
}


Выше, на уровне директивы http, прописана root-директория. Сама папка 89262207055 через сервер открывается. Но если поставить туда этот location /file, то сервер при запуске говорит, что location "/file" is outside location "/89262207055". Rewrite ниже также не работает, просто без признаков. Судя по логу, сервер его вообще игнорирует. Помогите, пожалуйста. Подойдут и примеры даже ваших конфигов, чтобы сравнить.
  • Вопрос задан
  • 4944 просмотра
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
MrJeos
@MrJeos
location лишь говорит серверу, какой блок команд необходимо выполнить, но не изменяет окружение. т.е. если сделать так:
location /ololo {
root ololo1;
}

То это приведёт не к директории $siteRoot/ololo/ololo1/, а к $siteRoot/ololo1/.
Это необходимо учитывать.
Ещё.
rewrite ^/89262207055/(.*).html$ /89262207055/index.php?id=block&block=$1 last;

Это если хочешь нормальную замену того, что нужно.
Как-то так.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Aecktann
@Aecktann
Вопервых:

так нельзя:
location /a/ {
  location /b/ {
    bla;
  }
}


а так можно:
location /a/ {
  location /a/b/ {
    bla;
  }
}
.

Во-вторых, директива alias не предназначена для реврайтов. Для реврайтов предназначена (внезапно! :) ) директива rewrite. С помощью алиасов и выделений можно перенаправить один статический файл на другой, но не перенаправить запрос на динамику.

Вам нужно что-то наподобие следующего:

server {
    listen 80;

    server_name localhost.dev;

    rewrite ^(.*).html$ index.php?id=block&block=$1 last;

    location /89262207055 {
        root /89262207055/;
    }
    location /89262207055/file {
        rewrite ^ /index.php?id=file&name= last;
    }
    location /index.php {
        bla;
    }
}


Читайте документацию, она _очень_ хорошая.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы