Различать %2F и / в правилах rewrite

Maxim Dounin mdounin at mdounin.ru
Mon Mar 9 02:02:25 MSK 2009


Hello!

On Sun, Mar 08, 2009 at 11:58:41AM +0200, Roman Odaisky wrote:

> Добрый день!
> 
> Обнаружилось, что правило
> 
>     rewrite ^/некий/путь/([^/]+)/[^/]+\.([^/.]+)$ /другой/путь/$1.$2;
> 
> не срабатывает на URL наподобие
> 
>     /некий/путь/42/Схема%20стека%20TCP%2FIP.png
> 
> потому что %2F и / считаются одним и тем же. Как можно повлиять на это 
> поведение?

Это поведение - оно в соответствии с RFC 2616, 3.2.3 URI 
Comparison.

Если хочется нестандартного поведения - используйте

    if ($request_uri ~ ...) {
        set  $a1  $1;
        set  $a2  $2;
        rewrite  ^  /другой/путь/$a1.$a2;
    }  

Только потом не говорите что вас не предупреждали.

Maxim Dounin





More information about the nginx-ru mailing list