The hosts started the match at Stade de la Route de Lorient on a positive note, as Jonathan Pitroipa and Cheick Diarra had two chances in as many minutes.
Abdoulaye Doucoure then saw his effort from outside the box saved by Nice goalkeeper David Ospina, before Pitroipa again squandered a chance on 33 minutes.
Renato Civelli had a good opportunity to put Nice in the lead against the run of play in the 36th minute when he headed Eric Bautheac's free kick towards goal, but failed to keep it on target.
All those missed chances in the first 45 minutes came back to haunt the home side, as Nice broke the deadlock seven minutes into the second half when Dario Cvitanich headed home Nemanja Pejcinovic's pass.
Things went from bad to worse for hosts Rennes as they were reduced to 10 men on 56 minutes when Chris Mavinga was dismissed for fighting.
Cvitanich made it 2-0 to Nice on 71 minutes from the penalty spot after Alou Diarra had handled the ball inside the area.
Bautheac wrapped up the points for the visitors six minutes from full time with left-footed shot from the centre of the box after being released by Alexy Bosetti.
Like Rennes, Nice also ended the encounter with 10 men after Pejcinovic was shown a straight red card for a bad challenge on Pitroipa in the 90th minute.