Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Если в пути "root" указана переменная, не находит ind ex
Hello!
On Fri, Feb 11, 2011 at 06:10:26PM -0500, nix wrote:
> Подскажите, а из-за чего nginx 0.8.54 при
> следующей конфигурации может
> вставлять пустую переменную $branch в root
> (root находится вне location) в то время, как в
> location со статикой $branch в root передается
> как "dev"? Пробую заходить по ссылке
> http://dev.test.dev.domain.ru/
>
> server {
> listen 80;
> server_name ~^(.*)\.test\.dev\.domain\.ru$ test.dev.domain.ru;
> set $branch $1;
>
> charset utf-8;
> root /srv/www/test/repo/$branch/htdocs;
> index index.php;
>
> location ~*
> \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|avi|djvu|mp3|mp4|ogv)$
> {
> root /srv/www/test/repo/$branch/htdocs;
> }
> }
Вопрос: как работает директива index?
Ответ: модуль index проверяет существование файлов с заданными
именами, и если находит, то делает внутренний редирект на нужный
индексный файл.
Вопрос: как работает директива set?
Ответ: директива set выполняется в фазе rewrite (server rewrite
для директив заданных на уровне server) и устанавливает
заданную переменную в заданное значение.
Вопрос: что представляет собой переменная $1?
Ответ: переменная $1 содержит выделение из последнего выполненного
регулярного выражения.
Вопрос: какое значение будет иметь переменная $branch в
приведённом выше конфиге после внутреннего редиректа на индексный
файл?
Ответ: после внутреннего редиректа server rewrites будут выполнены
повторно, и переменная $branch будет установлена в $1. При этом
последним регулярным выражением будет (неуспешное) тестирование "location ~*
...", т.е. значение $1 будет неопределено.
Вопрос: как быть?
Ответ: никогда не использовать нумерованные выделения в
server_name. Если нужны выделения - использовать *именованные*
выделения.
http://nginx.org/en/docs/http/server_names.html#regex_names
Maxim Dounin
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|