Welcome! Log In Create A New Profile

Advanced

bug: try_files не перенаправляет в location @ и генерит 404

January 10, 2015 07:25PM
Здравствуйте!

я пытался организовать рерайты на своем девелопмент сервере и столкнулся со странным багом.
есть папка с проектами ($document_root), в ней находятся папки которые соответствуют названиям проектов ($prjct_folder), и в папке проекта есть папка с исходниками ($prjct_src - ее название по умолчанию src, но могут быть другие src2, src_old, ...).

стояла задача при обращении по адресу (ЧПУ)

http://dev_hos/project_name/src/badurl

и адресу

http://dev_hos/project_name/badurl

перенаправлять оба логически одинаковых URL на исполнение скрипту:

/var/www/project_name/src/index.php

----------------------------------------------------------------------------

для реализации я создал конфиг похожий на этот (максимально упрощенный вариант)

----------------------------------------------------------------------------

server
{
listen 80;
server_name bug;
root /var/www;

set $prjct_folder '';
set $prjct_src 'src';
set $prjct_uri '';

location /
{

add_header Content-Type 'text/html; charset=UTF-8';
return 200 other;

}

location ~* ^/([^/]+)/?(src[^/]*)?/?(.*)
{
set $prjct_folder $1;
set $tmp_src $2;
set $prjct_uri $3;

if ($tmp_src)
{
set $prjct_src $tmp_src;
}

try_files $uri @notfound;

# add_header Content-Type 'text/html; charset=UTF-8';
# return 200 $document_root/$prjct_folder/$prjct_src/$prjct_uri;
}

location @notfound
{
add_header Content-Type 'text/html; charset=UTF-8';
return 200 $document_root/$prjct_folder/$prjct_src/$prjct_uri;
}
}

----------------------------------------------------------------------------

логика работы следующая: при обращении к серверу, ЧПУ попадает на обработку в блок с регулярным выражением, регулярное выражение извлекает из него название папки проекта и название папки с исходниками (если такова в адресе есть) и перенаправляет в блок @notfound который вызывает нужный скрипт (логику вызова скрипта я убрал, оставил только инструкции для дебага)

----------------------------------------------------------------------------

баг заключается в том, что при обращении по адресу вида (содержит src)

http://dev_hos/project_name/src/badurl

nginx выдает 404 проходя мимо блоков @notfound и /

при заходе на адрес без src

http://dev_hos/project_name/badurl

nginx корректно переходит в блок @notfound

----------------------------------------------------------------------------

в лог nginx попадает следующая ошибка:

#[error] 4288#0: *1 open() "/var/www/project_name/src/badurl" failed (2: No such file or directory), client: 192.168.234.1, server: bug, request: "GET /project_name/src/badurl HTTP/1.1", host: "bug"
Subject Author Posted

bug: try_files не перенаправляет в location @ и генерит 404

Valeriy January 10, 2015 07:25PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 204
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready