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

2015-01-11 Пенетрантность Valeriy
лог я скопировал в письме:

#[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

не найденный файл 

/var/www/project_name/src/badurl

то что он не найден это не удивляет, т. к. это ЧПУ. удивляет то что 

try_files $uri @notfound;

это событие не перенаправляет на блок

location @notfound

и удивляет, то что эта конструкция работает если убрать блок if

если поможете разобраться буду очень признателен, возможно я не заметил то
что заметили Вы
спасибо!

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256034,256044#msg-256044

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-01-11 Пенетрантность Valeriy
спасибо за ответ!

в моем конфиге if переопределяет папку с исходниками по-умолчанию
($prjct_src). возможно я сделал неудачный пример написав

http://dev_hos/project_name/src/badurl

вместо 

http://dev_hos/project_name/src_zero/badurl



возникшую проблему - я у себя решил, написав два отдельных регулярных
выражения
я всегда думал что одно регулярное выражение лучше двух, поэтому и
использовал if
но раз это не баг, а if плохая штука, тогда okay!
спасибо за консультацию!

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256034,256048#msg-256048

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-01-11 Пенетрантность Daniel Podolsky
2015-01-11 19:36 GMT+03:00 Valeriy nginx-fo...@nginx.us:
 удивляет то что
 try_files $uri @notfound;
 это событие не перенаправляет на блок
 location @notfound
 и удивляет, то что эта конструкция работает если убрать блок if

Я принялся глядеть в ваш конфиг внимательнее, и первое, что я
обнаружил - if  там не делает ничего полезного. можно его убрать, а
set $prjct_src  $tmp_src; оставить, и будет, по-видимому,
ровно то, что вы хотите получить.

это раз.

и два - почитайте http://wiki.nginx.org/IfIsEvil. ситуация try_files
wont work due to if там документирована (эта беда от того, что if
создает скрытый location, внутри которого дальше и происходит
обработка)
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-01-10 Пенетрантность Valeriy
Здравствуйте!

я пытался организовать рерайты на своем девелопмент сервере и столкнулся со
странным багом.
есть папка с проектами ($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

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,256033,256033#msg-256033

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-01-10 Пенетрантность Daniel Podolsky
2015-01-11 3:25 GMT+03:00 Valeriy nginx-fo...@nginx.us:
 баг заключается в том, что при обращении по адресу вида (содержит src)
 http://dev_hos/project_name/src/badurl
 nginx выдает 404 проходя мимо блоков @notfound и /
вы бы глянули в логи, что ли. там написано, какой именно файл не
найден. будете удивлены...
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru