За 2007-05-27

Re[2]: Apache RewriteRule & %2F

Hi dgstudio,

Sunday, May 27, 2007, 7:59:57 PM, you wrote:

U>> Если в URL есть %2F ("/") (к примеру /test%2Ftest/), правило:
U>> RewriteRule (.*) /rule.php?url=$1 [QSA,L]
U>> - не работает

> Мы пришли к выводу, что это нерешаемо, и написали на такой случай
> хелпер, который делает urlencode только русским символам в строке.
> Конечно, это не универсальное решение.

Проблема находится где-то до правил модуля mod_rewrite, поскольку
корневой .htaccess даже не загружается.

По поводу urlencode: я поступил аналогично, но предпочел полный
rawurlencode() с преобразованием %20 в _ и %2F в "/". В urlencode
пробел заменяется плюсом. А если кодировать только национальные
символы, будут проблемы с unsafe и reserved наборами. Особенно это
касается символа #
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+"
extra = "!" | "*" | "'" | "(" | ")" | ","
safe = "$" | "-" | "_" | "."
unsafe = CTL | SP | <"> | "#" | "%" | "<" | ">"
Вообще говоря RFC1738 достаточно жестко ограничивает диапазон
используемых символов в url path, RFC2068 дает чуть больше свободы -
набор extra и "$". Хотя насколько я помню файлы/ссылки с пробелом
индексируются и работают без проблем. Прошу поправить, если не прав.
А национальные симоволы без %-escape в url path использует
wikipedia, правда в utf8.

P.S. Тот пример правила, что я привел съедает также символы %2B
запроса. Сначала апач для себя преобразовывает %2B в +, а затем не
по rfc1738, пхп преобразовывает в пробел. Так что пришлось даже
отказаться от "?url=$1" в правиле.

   2007-05-27 23:01:14 (#668471)

Re[9]: Бесплатный хостинг

АЮ> найти нормальный хостинг по вполне умеренным ценам на
АЮ> http://www.agava.ru/hosting/

Немного странно ставить в пример российский хостинг, при том что
зарубежный стоит в год столько же, сколько российский в месяц.
При несоизмеримо большей надежности в техническом и юридическом плане.

   2007-05-27 21:00:50 (#668449)

Re: Apache RewriteRule & %2F

U> Если в URL есть %2F ("/") (к примеру /test%2Ftest/), правило:
U> RewriteRule (.*) /rule.php?url=$1 [QSA,L]
U> - не работает

Мы пришли к выводу, что это нерешаемо, и написали на такой случай
хелпер, который делает urlencode только русским символам в строке.
Конечно, это не универсальное решение.

   2007-05-27 21:00:43 (#668448)