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