Main > Apache | PHP | Servers > mod_rewrite и слеш

mod_rewrite и слеш

12.02.2012 0 comments » Views: 2,327

Apache logo

Напоролся, на то, что при использовании, символа %2F в передаваемом url, mod_rewrite отказывался работать..
После долгих поисков нашел нужную инфу, оказывается у Apache есть директива, регулирующая этот вопрос - AllowEncodedSlashes. По-умолчанию, она отключена, т.е. использовать слеши в виде %2F и %5C не получится.
При включении её в On, слеши отлично передаются. Разумность отключения этой возможности мне так и не стала понятна.

Так же проблему может вызвать амперсанд, закодированный с помощью urlencode, разберемся подробнее:

1. Есть у нас такая переменная

2. Нам необходимо передать её в URL, для этого мы готовим адрес

3. Вот так он будет выглядеть: http://site.ru/?a=A%26B&b=rand
4. На этом этапе все отлично, и даже будет работать, магия проявляется при использовании mod_rewrite. Пускай мы хотим сделать красивый URL, и преобразуем то, что есть у нас вот в такой url:

5. Получаем такой URL: http://site.ru/A%26B-rand.html
6. Пишем для него mod_rewrite правила

*замените %1,%2 на $1,$2

7. И оно у нас перестает работать! А почему? Дело в том, что правило работает правильно, но редирект получается у нас не верный, а именно:

index.php?a=A&B&b=rand

В итоге мы имеем уже не две переменные, а три. Весело? 🙂

8. Что же делать? В таком случае, необходимо, брать параметры из самого запроса, т.е. из {THE_REQUEST} для mod_rewrite. Применяя эти знания получаем:

У меня все начало работать. Чего и Вам желаю 🙂

p.s. Если последнее правило у Вас не работает, проверьте как передает сервер эти знчения, таким образом:
mod_rewrite

index.php

и уже исходя из этих данных поправьте регулярку из пункта 8

Author: | Rating: 4/5 | Tags: ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>