Добрый день!
Столкнулся я со странной проблемой, которую удалось решить небольшим
патчем в mod_rewrite. Интересно, кто-нибудь с таким сталкивался? И
насколько неадекватные последствия возможны от такого решения?
Перехожу к сути дела. Понадобилось нам реализовать такую штуку, чтобы
в документе можно было написать <!--#include virtual="/something" -->,
при этом чтобы этот-самый something при помощи mod_proxy запрашивался
с совершенно другого сервера.
Вроде бы, все должно быть просто. Итак, пишу:
RewriteEngine On
RewriteRule ^/something http://other.host/something [P]
Проверяю. Захожу на http://my.host/something - все работает как и
ожидалось. Но, при попытке подключить /something через include
virtual - уже не работает. Расследование показало, что в коде
mod_rewrite.c есть следующее:
/*
* Ignore this rule on subrequests if we are explicitly
* asked to do so or this is a proxy-throughput or a
* forced redirect rule.
*/
if (r->main != NULL &&
(p->flags & RULEFLAG_IGNOREONSUBREQ ||
p->flags & RULEFLAG_PROXY ||
p->flags & RULEFLAG_FORCEREDIRECT )) {
continue;
}
То есть, директивы RewriteRule с ключем [P] явным образом игнорируются
для subrequest-ов. Понятное дело, я выкинул из этого условия строчку
про RULEFLAG_PROXY, и все у меня заработало. Но остался вопрос - а
зачем это было надо? Почему плохо использовать proxy-запросы для
subrequest-ов? Какие могут быть отрицательные последствия снятия этого
ограничения?
С уважением,
Сергей Герштейн
--
заместитель директора по развитию
телекоммуникационная компания Урал Релком
// mailto:sg@xxxxx, тел (3432) 776440, 776441, факс 594956
=============================================================================
= Apache-Talk@xxxxxxxxxxxxx mailing list =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.