Goals from Morten Gamst Pedersen and Paul Dickov cancelled out Matthew Taylor's early strike to ensure maximum points for Mark Hughes' men over the festive period.
It was a tale of three free-kicks in the opening 10 minutes, as both teams looked to get off to a good start.
With a minute on the clock, Steven Reid, fresh from his thunderbolt strike against Wigan, drove a 25-yard set-piece comfortably into the arms of Sander Westerveld, but less than 90 seconds later the visitors were in front.
Ryan Nelsen, who made his Rovers debut against Portsmouth almost exactly 12 months ago, was adjudged to have handled the ball and from the resulting free-kick Taylor curled the ball beyond the despairing dive of Brad Friedel and into the corner of the goal.
By the ninth minute Rovers were level. Andy O'Brien fouled Dickov on the edge of the box and with an almost identical left-footed strike, Pederson curled the ball into the top right corner of the goal.
The hosts looked comfortable in possession from then on and it was only some badly timed challenges from midfield duo Salif Diao and Aliou Cisse that broke up their attractive and fluent play.
Lomana LuaLua curled an effort comfortably into the arms of Friedel and Shefki Kuqi glanced a header just wide at the other end, before Rovers took a deserved lead.
On 39 minutes, Dominic Matteo, recalled in place of flu victim Michael Gray, found Reid in space and the Irishman's 25-yard drive proved too hot to hold for Westerveld. Dickov reacted quickest to the rebound to head the ball into the far corner of the goal.
Both managers rang the changes shortly after the break, with the play never reaching the lively tempo of the first half.
Robbie Savage curled a free-kick agonisingly wide on 52 minutes and should have finished off substitute Craig Bellamy's centre late in the game.
The visitors pushed forward in search of an equaliser and LuaLua was guilty of a shocking miss, before Friedel produced a fine save to deny Taylor from distance, as Rovers held out for the points.