При использовании try_files в nginx, есть ли способ указать и использовать настраиваемую error_page только после того, как он попробовал каждый URI, указанный в директиве try_files?
Приведенная ниже конфигурация работает не работает:
location / {
if (-f $document_root/error_page.html ) {
error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html;
}
try_files $uri $uri/ @redirect_store;
}
Казалось бы, если вы используете директиву error_page, когда nginx не может найти переданный в URI, он немедленно возвращает настраиваемую страницу ошибки 404 вместо попытки следующей записи в try_files. Кажется, что директива error_page переопределяет try_files?
Я могу заставить это работать, только если не указана директива error_page:
location / {
try_files $uri $uri/ @redirect_store;
}
Но в приведенном выше случае, если каждая запись проверена, а она все еще не найдена, возвращается значение по умолчанию Страница ошибки 404, но я хочу, чтобы она возвращала настраиваемую.
Кто-нибудь знает, как этого добиться, или это невозможно? Это ошибка в nginx? Я должен иметь возможность использовать настраиваемую error_page с try_files, предполагая, что URI не был найден ни в одной из записей try_files.
Подводя итог, try_files не проходит цепочку записей, если указана директива error_page.
Есть две проблемы с тем, что вы пытаетесь сделать:
, если
блок ведет себя не так, как вам хотелось бы местоположения /
блока В этом документе объясняется, почему блок if
должен использоваться только в очень специфических ситуациях.
Заключительное действие вашего [ Блок 1142153] location / предназначен для вызова указанного местоположения @redirect_store
. Если сгенерирован какой-либо ответ 404, он, вероятно, произойдет после того, как обработка покинула блок location /
. Поэтому любая директива error_page
, объявленная только в пределах области блока location /
, будет проигнорирована (независимо от описанных выше проблем с блоком if
).
Последняя строка документа error_page
гласит:
Если обработка uri приводит к ошибке, код состояния последнего произошедшая ошибка возвращается клиенту.
Это означает, что ваш защитный оператор if
в любом случае не нужен.
Попробуйте вместо этого:
error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 495 496 497 500 501 502 503 504 505 506 507 /error_page.html;
location / {
try_files $uri $uri/ @redirect_store;
}