random_index

Ruslan Ermilov ru на nginx.com
Чт Ноя 3 20:30:48 UTC 2011


On Thu, Nov 03, 2011 at 08:31:04PM +0400, Maxim Dounin wrote:
> Hello!
> 
> On Thu, Nov 03, 2011 at 07:28:05PM +0300, ola wrote:
> 
> > Здравствуйте, Nginx-ru.
> > 
> > Помогите, пожалуйста, разобраться с random_index.
> > 
> > server {
> >     listen      127.0.0.1:80;
> >     server_name localhost;
> >     error_log   logs/error.log debug;
> > 
> >     location / {
> >         root   /common/example.org/www;
> >         index  index.html;
> >     }
> > 
> >     location ~ ^/banner(\d+)/$ {
> >         alias /common/example.org/adv/$1/;
> >         random_index on;
> >     }
> > }
> > 
> > При  запросе  /banner2/ получается 404-я ошибка, nginx пытается отдать
> > файл /common/example.org/www/banner2/1.html
> > 
> > Если  использовать  location ~ ^/banner(\d+)/ {} (без завершающего $),
> > то  nginx  делает  10 внутренних редиректов и "Redirection limit of 10
> > URL's reached"
> 
> Если в директиве alias используются переменные, то она задаёт 
> полный путь к файлу, который надо использовать.

Это неверно.  Наличие в значении alias переменных не приводит
к такому эффекту.  Правильно написано в документации, а именно:
если alias указана внутри location, заданного регулярным
выражением, то regexp должен содержать captures, и alias должна
на них ссылаться.  В любом случае значение директивы alias заменяет
значение директивы location целиком, будь то regexp или префикс.

> Должно сработать как-то так:
> 
>     location ~ ^/banner(?<number>\d+)/(?<file>.*) {
>         alias /common/example.org/adv/$number/$file;
>         random_index on;
>     }


-- 
Ruslan Ermilov



Подробная информация о списке рассылки nginx-ru