Рад всех приветствовать! А особенно - Eugene!
Четверг мая 07 20 01:22 Eugene Grosbein писал к Gennadij Pastuhov:
GP>> <IfModule mod_rewrite.c>
GP>> RewriteEngine on
GP>> RewriteRule (.*) <тут поскипано>/%D0%B3%D1%83%D0%B4 [R=301,NE,L]
GP>> </IfModule>
GP>> Т.е., предполагается, что при заходе на сервер будет
GP>> перенаправление на
GP>> страницу с окончанием 'гуд'. При попытке зайти (хоть курлом)
GP>> фактически отдаётся
GP>> адрес /%D0%B3%D13%D0%B4 (г3д). Возникло предположение, что движок
GP>> mod_rewrite
GP>> воспринял %8, как backreference, и выбросил его. Попробовали
GP>> вручную вписать в
GP>> конфиг: /\%D0\%B3\%D1\%83\%D0\%B4 - так RewriteRule заработало
GP>> нормально.
GP>> Вопросы: верное ли это предположение? Если конфиг апача генерится
GP>> эхотагом, то,
GP>> получается, нужно подобные строки (содержащие %), прогонять
GP>> через: s/%/\\%/g ?
GP>> И риторический: долгое гугление на эту тему вообще ничего не
GP>> дало, как будто
GP>> такая проблема возникла первый раз. Правда, что ли?
EG> Hадо было не гуглить, а *внимательно* читать документацию
EG> на директиву RewriteRule.
EG>
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule
EG> Pattern is a perl compatible regular expression. On the first
EG> RewriteRule it is applied to the (%-decoded) URL-path of the request;
EG> subsequent patterns are applied to the output of the last matched
EG> RewriteRule.
EG> Ключевое слово %-decoded. То есть матчить надо уже декодированную
EG> строку. Если же у тебя реально матчятся %-кодированные данные, значит
EG> твои ссылки некорректно дважды %-кодируются при генерации.
Я не очень большой спец по апачу, не очень понял ответ. То, что RewriteRule
применяется к %-decoded, означает, что сначала строка из директивы
декодируется, а потом к ней применяется правило? Или что правило уже должно
быть записано в декодированном виде? Сейчас, насколько я понимаю, в конфиг
передаются строки, прошедшие код типа этого:
use URI::Escape;
my $url = '/гуд';
my $escaped = uri_escape_utf8($url);
print "Esc: " . $escaped;
Esc: %2F%D0%B3%D1%83%D0%B4
... Jonny wanna live