il ? si riferisce al campo subito precedente dicendogli va bene anche se non c'è (almeno se ricordo bene)
tray this
^index.php/var1=([a-zA-Z0-9_,\.\-]+)/var2=([a-zA-Z0-9_,\.\-]+)/var3=([a-zA-Z0-9_,\.\-]+)\?(.*)
ovviamente devi SEMPRE passare 3 variabili
cmq basta che la provi con le preg di php
apache usa le PCRE per gestire le espressioni regolari quindi se va su php deve andare anche su apache
RewriteRule ... index.php?var1=$1&var2=$2&var3=$3&$4 [L]
codice:
<?php
$matches = array();
$testo = "index.php/var1=1/var2=5/var3=3?asd";
preg_match("#^index.php/var1=([0-9]+)/var2=([0-9]+)/var3=([0-9]+)\?(.*)#", $testo, $matches);
print_r($matches);
?>