Apache2/htaccess. Фильтрация ссылок

Небольшое лирическое отступление. Как известно, htaccess способен переопределять директивы apache в своей директории, а также в поддиректориях (если там нет своих htaccess). Это при условии, что в самом apache подключен соответствующий модуль mod_rewrite и разрешено переопределение директив. Также htaccess работает со статическими ссылками, преобразуя их в динамические по прописанным в нем правилам. В общем сие сказанное можно представить следующим рисунком.


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

Разработаем правила, по которым мы сможем определенным образом фильтровать ссылки:
- до первого разделителя будем отбирать относительные пути к разделам нашего тестового сайта (path);
- все остальное будем игнорировать, но не забудем и про параметры GET запросов (param).


Для случая http://test.ru/abc
RewriteRule ^([a-zA-Z0-9]*)$ index.php?path=$1&param=%{QUERY_STRING} [L]

Для случая http://test.ru/abc/ или http://test.ru/abc/def
RewriteRule ^([a-zA-Z0-9]+)/(.*)$ index.php?path=$1&param=%{QUERY_STRING} [L]

В итоге получаем:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)/(.*)$ index.php?path=$1&param=%{QUERY_STRING} [L]
RewriteRule ^([a-zA-Z0-9]*)$ index.php?path=$1&param=%{QUERY_STRING} [L]