Рейтинг:0

Почему nginx «возвращает 301» и «try_files» попадают в бесконечный цикл

флаг dk

мой код конфигурации:

индекс index.html index.php;
место расположения / {
    если ($uri = '/a/') {
        вернуть 301 https://example.com/a;
    }
    try_files $uri $uri/ =404; 
}

Если URL-адрес /а/, 301 к / а, тогда try_files часть, добавить / к / а закончиться, стать /а/.

Следующим шагом, я думаю, он попробует показатель определение, стать /a/index.htmlи добраться до файла.

Но на самом деле, он пытался /а/, и выпрыгнуть из место расположения, затем переходит в место расположения снова, чтобы если ($uri = '/a/') { ... }.

Потом бесконечный цикл.

Почему, я просто запутался.


Я хочу сделать это

  1. Если запрос пример.com/а/, прыгать, чтобы пример.com/а, то до 2
  2. Если запрос пример.com/а, показать example.com/a/index.html (но адрес пример.com/а).

Кто-нибудь может помочь мне достичь этого?

Рейтинг:2
флаг cz

Он делает именно то, для чего предназначен.

Вы никогда не сможете достичь /a/index.html потому что вы продолжаете перенаправлять обратно на / а прежде чем это может произойти. Когда nginx обрабатывает это, он видит каталог в файловой системе и автоматически перенаправляет (правильно) на /а/.

Вы должны удалить это неуместное перенаправление.

флаг dk
Вы имели в виду, когда try`$uri/`, сначала `/a/`, а затем `/a/indx.html`? (и `/a/` запускает повторный ввод `location` обратно в `/a`.)
digijay avatar
флаг mx
Да, это то, что ваш 301 редирект говорит вашему nginx делать
Michael Hampton avatar
флаг cz
@nanxiaobei Вы никогда не попадали в try_files, потому что if обрабатывается первым. И **вы не можете убрать косую черту в конце при показе статического контента**. Это обязательно. Перестань пытаться.
флаг dk
@Майкл Хэмптон Спасибо.Показанная ошибка nginx была «бесконечным циклом», поэтому я думаю сначала «if», затем «$uri/», затем обратно в «if» - так что это цикл. Когда `if` обрабатывается, он изменяется на `/a`, поэтому снова должен быть `/a/`, он возвращается к `if`.
Рейтинг:0
флаг sv

Добро пожаловать в ServerFault. Вы можете сделать то, что упомянуто в ОП, со следующим кодом...

место расположения / {
    если ($uri = '/a/') {
        вернуть 301 https://example.com/a;
    }
    try_files $uri $uri/index.html =404; 
}

См. соответствующий вопрос и принятый ответ на Удаление косой черты в конце URL-адреса с помощью nginx .

В принципе, нам не нужно полагаться на показатель и скорее служить index.html непосредственно, когда пример.com/а запрашивается.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.