Fazendo algumas correções na resposta de Redmumba ...
RewriteEngine on
RewriteMap esc int:escape
RewriteCond $0 !^/media/
RewriteRule .* /index.php?url=$0\%3f${esc:%{QUERY_STRING}} [B]
Use o $0 backreference em vez de %{PATH_INFO} para se referir ao caminho de entrada. No RewriteRule , adicione o sinalizador B para escapar novamente do URL (conforme explicado no mod_rewrite docs ). O restante da regra está presente para permitir a duplicação da string de consulta original, para que ela possa ser recuperada quando o parâmetro url não estiver em escape pelo seu index.php .
Como alternativa, se o seu index.php espera usar sua string de consulta diretamente, em vez de decodificá-la de dentro do parâmetro url , você usaria
RewriteEngine on
RewriteCond $0 !^/media/
RewriteRule .* /index.php?url=$0 [B,QSA]
Esta é realmente uma tradução mais fiel da regra de reescrita do LighTTPD, mas você corre o risco de um conflito caso a string de consulta de entrada contenha um parâmetro url .