ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: perl set: значение $uri при включенном index



Hello!

On Sun, May 13, 2012 at 12:14:10PM -0400, Budulayj wrote:

> Добрый день.
> 
> Пытаюсь использовать perl_set для
> принудительного перевода всех ссылок в
> нижний регистр. При включенной
> директиве index значение переменной $uri в
> блоке perl_set не соответствует значению
> $uri после применения index. То есть при
> открытии "корневой" страницы
> начинается "вечный" редирект. Вывел
> значение переменных $uri и $uri_lowercase в лог -
> $uri определяется как /index.html, $uri_lowercase как
> /. Так и должно быть?

Да.  Значение $uri меняется после внутреннего перенаправления на 
индексный файл.  Значение переменных, полученных через perl_set, 
вычисляются один раз на запрос, и при повторных обращениях в 
рамках того же запроса - не перевычисляются.

> 
> На всякий случай, конфиги такие:
> http {
> ...
> perl_set $uri_lowercase 'sub {
>               my $r = shift;
>               my $newuri = $r->uri;           
>               $newuri = lc($newuri);
>               return $newuri;
>       }';
> ...
> }
> 
> server {
> ...
> index index.html index.htm;
> ...
> location / {
> if ( $uri != $uri_lowercase ) {
> rewrite . http://$host$uri_lowercase;
> }
> ...
> }

Работать будет как-то так:

    perl_set $uri_not_lowercase 'sub {
        my $r = shift;
        my $u = $r->uri;
        return ($u ne lc($u)) ? "1" : "0";
    }';

    perl_set $uri_lowercase 'sub {
        my $r = shift;
        return lc($r->uri);
    }';

    if ($uri_not_lowercase) {
        return 302 $uri_lowercase;
    }

Впрочем, проверку "uri не в lowercase" наверное правильнее сделать 
вообще на regexp'ах, и не дёргать perl без необходимости.

Maxim Dounin

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


 




Copyright © Lexa Software, 1996-2009.