ПРОЕКТЫ 


  АРХИВ 


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]

редиректы на полный урл


  • To: nginx-ru@xxxxxxxxx
  • Subject: редиректы на полный урл
  • From: "Alexey Mahotkin" <squadette@xxxxxxxxx>
  • Date: Tue, 24 Jul 2007 13:00:10 +0400
  • Dkim-signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=nzx812CNZlG79eQuV5VVKDyg6q7YaYWSaDev/MdH7N/Seggarjv2BkcxBegxrJwG51xvQxD/vWZl1BRrj1qfdsD29MBJJ5pBHbfyzirr3rL3Nxa7s8oKCUPJ1K+QDv/kM+D1Xp4oyz87Rl8vH56oJTmCqcMlxK5rTtW2iruOF7w=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=Q8zW0PQdyIu9KPFRB+KKiZ4iXIkWxneLmaSZ3+2LDt48WR3EiqQCjRPsFPpKFKVFPts/g5PQK1B0Xcs0d5IV4v8pXtXCIdtqJcovLaWXlkFbaBg1SQlN4YfcqHMorxPnx+euhecF0qLFhSNr38qSUE+VX5QU8XdPPQXQVlM2yuY=

nginx 0.5.26 из Fedora 7.

я использую простенький трекер редиректов на своих блогах -- все
ссылки на внешние сайты (например, http://www.microsoft.com/)
заменяются на

/r/http://www.microsoft.com/  и при клике на этот урл происходит
прозрачный для пользователя редирект, с оставлением записи в логе
сайта.

Под апачем всё работало очевидным образом:

RewriteRule /r/(.*) $1 [R]


После переключения на nginx с бэкендовым апачем всё сломалось, а
именно nginx, несмотря на то, что ему приходит от бэкенда абсолютный
урл в редиректе, добавлял к нему слэш, в результате получалось
http://2read.ru/http://www.microsoft.com/

Я заборол это на фронтенде, но результат получился не совсем, на мой
взгляд, очевидный:

               location /r/ {
                       rewrite ^/r/http:/(.*)$ http://$1 break;
               }

заметьте, что после первого http: один, а не два слэша (видимо, nginx
канонизирует урлы).  В документации написано, что nginx специальным
образом обрабатывает урл справа, начинающийся с "http://";.  Напоминаю,
что кроме HTTP есть ещё как минимум протоколы https:// и ftp://, не
говоря уж про news, mailto и skype.  Сейчас, если я правильно понимаю,
я должен все эти протоколы прописать у себя в редиректах на всех
сайтах.

Что хотелось бы в результате получить:

а) добавление слэша на абсолютный редирект с бэкенда -- это явный баг!

б) "абсолютность" урла нужно проверять, видимо, по регексу ^[a-z]:/* а
не только по строке "http://";

в) хотелось бы, чтобы каким-то образом работало очевидное правило, как
в apache (оно ещё и само собой добавляет query string!).

Спасибо!

--
Алексей Махоткин
http://squadette.ru/


 




Copyright © Lexa Software, 1996-2009.