Не только я, но и многие, даже англоязычные (хотя у них то это совсем редкость) коллеги встретились с проблемой mod_rewrite (rewrite engine), в которой он в упор не хочет воспринимать %-содержащие строки, хотя, вроде как, должен. Таким образом, пока у нас в строке URL находятся только стандартные, притом, конечно, английские символы - все замечательно. Но как только mod_rewrite встречает на своем пути кодированную строку - все, что начинается со знака % для него просто не существует.
К сожалению, решением этого явного бага создатели Апача (это ведь им был подарен этот модуль) не озадачиваются, потому пока приходится идти обходным путем (не всегда причем и это-то возможно) путем ухудшения внешнего вида URL.
Итак, чтобы mod_rewrite таки воспринял экранированную строку с символами %, придется экранировать эту строку ДВАЖДЫ!
Пример на PHP (нормальный):
$url = urlencode('это моя строка');
Пример как надо для mod_rewrite:
$url = urlencode(urlencode('это моя строка'));
Аналогично и с другими языками. И это еще все хорошо до тех пор, пока Вы не пытаетесь отправить тупо данные формой (через submit), браузер-то без лишних телодвижений, например, через Javascript, дважды сам экранировать строку не будет.
Актуально для: Apache 2.2.16 и ниже (возможно, и выше)
Комментарии
Оставить комментарий
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)