Match ends, Queens Park Rangers 1, Bristol City 2.
Bristol City went third in the Championship after surviving a first-half onslaught from QPR to come back from a goal down and get a fourth win in six games.
Rob Dickie's powerful close-range header from an excellent Chris Willock cross put Rangers ahead early on as the hosts missed a series of good chances in a first half they dominated.
They were made to pay for their wastefulness when former R's striker Nahki Wells equalised against the run of play, tapping in Callum O'Dowda's deflected cross, and Adam Nagy added to their woes just after the break when O'Dowda pounced on a defensive error to set up the Hungarian's good finish.
Wells, who scored 24 goals for QPR during two loan spells before a £5m move to City from Burnley in January, almost made the game safe five minutes from full-time but his curling free-kick clipped the outside of the post.
City are level on points with second-placed Bournemouth, who lost at home to Preston, while QPR drop to 17th.
Both sides could have taken the lead before Dickie's opener - Lyndon Dykes headed wide for Rangers while Bright Osayi-Samuel forced a good save from Daniel Bentley when through one-on-one, and Nagy shot wide for City after good play in the R's area.
Having gone in front Rangers should have been further ahead inside the first 30 minutes as the impressive Osayi-Samuel forced another save from Bentley, while Nagy deflected Tom Carroll's shot over the bar and Josh Dasilva cleared a Willock effort off the line.
Scotland striker Dykes had another effort soon after the equaliser, but City struck their opponents with a sucker punch five minutes after the restart.
It could have been a less tense finish for Dean Holden's side had Nagy not put a good chance over the bar with 20 minutes left as Rangers saw Macauley Bonne shoot wide and Osayi-Samuel miss a good chance in stoppage time.
Queens Park Rangers manager Mark Warburton told BBC Radio London:
"The players deserve enormous credit for the manner in which they responded to Friday's frustration and defeat, and to play like that I'm so pleased for them, but we've got to recognise that we've got to get our rewards, you've got to put the ball in the back of the net and be ruthless in both boxes.
"Our goalkeeper has had nothing to do all night at all. Apart from bend down and pick it out of the net twice, he's not had a save to make.
"But we've got to look at it as a young squad coming together - they were very good for long periods."
Bristol City head coach Dean Holden told BBC Radio Bristol:
"Mark Warburton's teams are always very pleasing on the eye and they got the ball down in that first half and they gave us real problems. Dan Bentley's made some big saves at the right time.
"We've got the equaliser just before half-time, which is so important, and we had to change things a little bit in the second half to make us a little bit more solid and protect the spaces a bit more.
"We knew on the counter-attack we were going to be a threat and Callum O'Dowda with two assists, Nakhi's come back to his old club and I could see in his eye before the game he was ready for this one having missed out on the last couple of games.
"It was backs to the wall in the first half but a really spirited display in that second half, which you need in the Championship, but with some real quality as well."
- 4DickieBooked at 27mins
- 3WallaceSubstituted forHämäläinenat 74'minutes
- 12BallSubstituted forAdomahat 68'minutes
- 22CarrollBooked at 69mins
- 21WillockSubstituted forKelmanat 83'minutes
- 9DykesSubstituted forBonneat 68'minutes
- 39De Silva
- 3DasilvaSubstituted forRoweat 45'minutes
- 18SemenyoSubstituted forBakinsonat 83'minutes
- 7MartinSubstituted forDiédhiouat 90+3'minutes
- 21WellsBooked at 57minsSubstituted forMooreat 88'minutes
- James Linington
- Shots on Target
Second Half ends, Queens Park Rangers 1, Bristol City 2.
Foul by Macauley Bonne (Queens Park Rangers).
Taylor Moore (Bristol City) wins a free kick in the defensive half.
Attempt missed. Bright Samuel (Queens Park Rangers) left footed shot from the centre of the box is close, but misses to the right. Assisted by Tom Carroll.
Substitution, Bristol City. Famara Diédhiou replaces Chris Martin.
Corner, Queens Park Rangers. Conceded by Tommy Rowe.
Attempt blocked. Bright Samuel (Queens Park Rangers) right footed shot from the centre of the box is blocked.
Attempt missed. Macauley Bonne (Queens Park Rangers) header from the centre of the box misses to the right.
Offside, Bristol City. Daniel Bentley tries a through ball, but Chris Martin is caught offside.
Attempt missed. Albert Adomah (Queens Park Rangers) right footed shot from the centre of the box misses to the left. Assisted by Ilias Chair with a cross following a corner.
Corner, Queens Park Rangers. Conceded by Tomas Kalas.
Attempt blocked. Osman Kakay (Queens Park Rangers) right footed shot from the right side of the box is blocked. Assisted by Macauley Bonne with a headed pass.
Substitution, Bristol City. Taylor Moore replaces Nahki Wells.
Attempt blocked. Ilias Chair (Queens Park Rangers) right footed shot from outside the box is blocked. Assisted by Tom Carroll.
Attempt blocked. Ilias Chair (Queens Park Rangers) right footed shot from outside the box is blocked. Assisted by Macauley Bonne.
Nahki Wells (Bristol City) hits the left post with a right footed shot from outside the box from a direct free kick.
Foul by Albert Adomah (Queens Park Rangers).
Callum O'Dowda (Bristol City) wins a free kick in the attacking half.
Hand ball by Albert Adomah (Queens Park Rangers).
- Anton Ferdinand: Football, Racism and Me: How the John Terry incident drove him to tackle the problem in the game
- Rugby League's Great British Lions: Follow a behind the scenes look at their return tour down under