Рассмотрим пример этих директив, взятый из файла .htaccess для некоторой cms. В качестве справочника будем смотреть на официальное описание работы mod_rewrite.
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.ru$ [NC]
RewriteRule ^(.*)$ http://www.example.ru/$1 [L,R=301]
RewriteBase /
RewriteRule ^\.htaccess$ [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(.*)$
RewriteCond %{REQUEST_URI} (.*)/$
RewriteRule ^(.*)/?$ /?$1&%{QUERY_STRING}
RewriteCond %{REQUEST_URI} !\.(.*)$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301]
Options +FollowSymlinks переопределяет поведение сервера для символических ссылок. Обычно символические ссылки уже разрешены в файле конфигурации сервера httpd.conf, но если это не так, то эта директива необходима для работы mod_rewrite.
Второй строчкой идет “RewriteEngine On”. Когда она включена все дальнейшие директивы тоже выполняются, установка ее в off отключает выполнение всех нижележащих директив. RewriteEngine не наследуется и поэтому ее надо включать во всех файлах httaccess, в которых имеются директивы mod_rewrite. Следующие две директивы перенаправляют запрос с нашему сайту (example.ru), набранный без префикса “www” к нашему же сайту, но с префиксом “wwww”. Флаг [L] в RewriteRule приводит к отказу от обработки следующих RewriteRule, а флаг [R=301] делает внешнее перенаправление с помощью 301 редиректа. “http://www.example.ru” явно указывает префикс перенаправления. Далее в нашем примере идет директива “RewriteBase /”. Такая установка отменяет базу перенаправления по умолчанию – физического адреса директории, где лежит файл htaccess. Tак как физический адрес обычно не совпадает с URL, то она обычно необходима. Следующая одиночная директива “RewriteRule ^\.htaccess$ [F]” запрещает доступ к файлу, совпадающему с регулярным выражением “^.\htaccess$” с помощью флага [F]. Смысл регулярного выражения в скобках: ^ – начало строки; \. – символ точка, так как точка является специальным символом, то его экранируют; $ – конец строки. Следующая цепочка из трех директив “RewriteCond” отменяет перенаправление, если в запросе набран путь к файлу или директории, или путь содержит точку. Следующая директива “RewriteCond %{REQUEST_URI} (.*)/$” разрешает перенаправление для адресов, оканчивающихся на “/”. Следующая за ними “RewriteRule ^(.*)/?$ /?$1&%{QUERY_STRING}” помещает путь обращения, удовлетворяющий перечисленным условиям в строку запроса. То есть, если будет набран запрос “http://www.example.ru/15/?m=1″, что относительно корня сайта равно “15/?m=1″, мы получим “/?15&m=1″. В этой директиве представлена хитрая игра знаком вопроса. В первом случае он является специальным символом в регулярном выражении и означает “один или ноль символов”. Во втором появлении он означает начало строки запроса. Последние три директивы перенаправляют все запросы, не имеющие точки внутри и не оканчивающиеся на “/” на тот же URL, но с “/” на конце. Так как редирект здесь также внешний, то цепочка перенаправлений будет выполнена вновь уже для этого URL. Вообще говоря, это не совсем правильно и здесь правильнее было бы явно указать вместо слэша http://www.example.ru/ – RewriteRule ^(.*)$ http://www.example.ru/$1/ [R=301].