Rovers suffered a rare defeat at Ewood Park after substitute Eros Pisano struck late to win all three points for Bristol City.
The Italian poked home with only 10 minutes remaining in the contest for the only goal of an even game in East Lancashire.
There wasn't much between the two teams, with Rovers going closest midway through the second half through Bradley Dack.
The visitors didn't offer much in the second half, but Pisano's close range strike proved the difference, as the Robins cemented their place in the play-offs, and with it, left Rovers with work to do if they are to sneak into the top six with just 15 games left of the 2018-19 season.
Boss Tony Mowbray named three changes to the starting lineup against Lee Johnson's Robins, with Charlie Mulgrew and Derrick Williams both coming into the back four, whilst Richie Smallwood returned to central midfield.
The trio came into the team in place of the benched Amari'i Bell, whilst injured pair Darragh Lenihan and Corry Evans weren't included in the squad.
It was a lively start from both start, with the in form Adam Armstrong having the clearest opportunity in the opening moments, but curled wide of Blackburn-born Frank Fielding's goal.
At the other end, City attacker Andreas Weimann forced David Raya into a smart stop down low to his left, before Famara Diedhiou's attempted pull back was blocked by a Rovers defender.
On the half hour mark it was Armstrong again who proved to be the dangerman, cutting in from the left and forcing Fielding to beat the strike away from danger.
Striker Diedhiou had arguably the best chance of the half with only five minutes to go until the break, but the Senegalese frontman could only head a Jamie Paterson corner a couple of yards over the upright from only eight yards out.
Rovers raced out of the traps in the second half, and Dack's low cross into the box just evaded Armstrong at the back post, who surely would have opened the scoring had he got something on it.
The hosts started the half the stronger, with Jack Rodwell firing over from range, before Raya had to tip over Diedhou's bouncing header from close range at the other end.
A super challenge from Tomas Kalas stopped Danny Graham from tapping home Elliott Bennett's low ball in just before the hour, prior to Williams heading a Mulgrew free kick well over the bar.
Dack was next to try his luck, but after latching onto Armstrong's excellent cross and sitting two opponents down on their backsides, the playmaker saw Fielding in his way at the near post and the game remained scoreless.
However, despite having the better of possession and chances in the second half, it was the visitors who took the lead from set pieces.
A Callum O'Dowda inswinging corner came a long way and fell to the feet of substitute Pisano at the back post, with the Italian prodding home with just 10 minutes remaining.
There was still time for the returning Kasey Palmer to test Raya from range, and despite searching for an equaliser, it was all in vain for Rovers, who probably didn't deserve to lose the clash.
Rovers: Raya, Bennett, Rodwell, Mulgrew (c), Williams, Smallwood, Travis (Nyambe, 58), Reed, Dack (Rothwell, 74), Armstrong, Graham.
Unused substitutes: Leutwiler, Bell, Brereton, Conway.
Booked: Travis, 25
Bristol City: Fielding, Dasilva, Webster, Wright (c) (Pisano, 63), Brownhill, Diedhiou, O'Dowda, Weimann (Palmer, 72), Paterson (Taylor, 72), Pack, Kalas.
Unused substitutes: O'Leary, Kelly, Eliasson, Semenyo.
Goal: Pisano, 80
Booked: Wright, 37, Brownhill, 75, Fielding, 90.
Referee: James Linington.
Attendance: 13,593 (1,038 away)