|
Давно хотел разобраться с апавческим mod_rewrite, чтобы сделать у себя на сайте красивые линки и т.п. Но, поскольку я человек ужасно ленивый и времени свободного мало, то руки не доходили. Сейчас как раз подвернулся один проектик, на котором я ре?ил отработать эту практику.
Сразу скажу — мне влом разбираться с чужим кодом. Я знаю, что в вордпрессе вполне себе нормальная обработка через mod_rewrite, но это ж надо вдумываться, какой кусок конфига отвечает за редирект и всё в этом роде. Посему была поставлена задача-минимум:
- Есть индексный файл
index.php, который при нормальных условиях виден в строке запроса не будет;
- Есть строка запроса наподобие
http://somesite.ru/Section/Tag/Subtag/?q=some_query&t=some%20another%20query;
- Нужно ту часть строки, которая начинается с
Section/…, переправить в качестве параметра вы?еупомянутому файлу index.php;
- Нужно при этом не потерять саму строку запроса (т.е. то, что идём после знака вопроса в п. 2.
Почитав апачевый мануал, я при?ёл к выводу, что всё не так уж сложно, но вот ре?ить поначалу задачу никак не получалось — апач редиректил запрос на нужный мне файл index.php, но в качестве параметра ему передавал не нужную мне строку, а имя этого же файла :/ Не буду томить: в итоге всё ре?илось использованием переменной сервера %{REQUEST_FILENAME} вместо %{REQUEST_URI} и подстановкой в правило переименования переменной собственно запроса %{QUERY_STRING}.
Вот как выглядит конечный вариант:
# @author cryonyx
Options ExecCGI FollowSymLinks Includes MultiViews
# Enabling rewriting engine
RewriteEngine on
# Checking whether requested file exists and if not, this means
# that redirect is to be performed.
# Path to requested file is stored in query variable named "sym_path".
# All the other params are passed as usually.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php\?sym_path=$1&%{QUERY_STRING} [L]
Viewed 11689 times by 1840 viewers
|