?
является специальным символом (выбирает 0 или 1 из предыдущего шаблона), .*
является жадным (будет соответствовать как можно дальше, поэтому до конца, поэтому $ 2 будет всегда быть пустым, так как $ 1 съедает все до конца строки.
Строка запроса отсутствует в строке, с которой совпадает RewriteRule, и проверка шаблонов в строке запроса обычно выполняется с помощью RewriteCond %{QUERY_STRING} pattern
перед тем, какa RewriteRule.
Однако нам не нужно баловаться регулярными выражениями, чтобы получить строку запроса в URL:
RewriteRule ^zina/(.*)$ /?p=$1&option=com_zina&Itemid=82 [L,R,QSA]