среда, 28 июля 2010 г.

Обработка знака вопроса в .htaccess

Задача:
Сделать обработку url, введенного пользователем, одним файлом.

Например, юзер вводит http://host.com/links - обработка идёт http://host.com/dispatcher.php?url=links. Эта задача решается элементарно:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatcher.php?url=$1 [NC]

Но всё становится во много раз сложнее, если юзер лезет по адресу http://host.com/books/?id=12345. Казалось бы, нужно обрабатывать http://host.com/dispatcher.php?url=books/?id=12345, но вы сами понимаете, это неправильно, т.к. в урле не может быть двух знаков вопроса.

В качестве воркэраунд можно убрать знак вопроса и знак равентса из урлы: http://host.com/dispatcher.php?url=books/id12345 но это не фэн-шуй. К тому же, мои исследования показали, что знак вопроса не обрабатывается в .htaccess вообще.

Как же выйти из положения? Вариант не использовать знак вопроса не годится - мне нужны имеенно такие урлы. Вариант писать отдельный обработчик тоже не годится из соображений универсальности скрипта.

Решение на удивление простое. В dispatcher.php мы берём урлу не $url=$HTTP_GET_VARS["url"], а $url=$_SERVER['REQUEST_URI'].

Я подозреваю, что проблемы какие-то ещё всплывут, но пока не понятно, какие, и как.

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

Комментариев нет:

Отправить комментарий