QPR substitute Bobby Zamora struck a dramatic 90th-minute winner as 10-men Rangers made an immediate return to the Premier League by defeating Derby in an absorbing play-off final at Wembley.

The London side had been hanging on - with goalkeeper Robert Green making a series of good saves - before Zamora pounced on an error from Derby defender Richard Keogh to score just his fourth goal of the season with Rangers' only shot on target.

Harry Redknapp's side had been reduced to 10 men just before the hour when Gary O'Neil was red carded for a late challenge on Johnny Russell, who was closing down on goal.

Bobby on the spot for Rangers

Bobby Zamora's goal came with QPR's first and only shot on target in the match. The 33-year-old's last three goals for the club have arrived in the 90th minute or later

Derby were already in the ascendancy by then and looked likely to go on and win the contest after assuming a numerical advantage. But Rangers defended with courage and organisation and struck decisively through Zamora, as boss Redknapp ended his first play-off campaign with promotion.

QPR had laboured through periods of the Championship season and won just four of their previous 10 games coming into the Wembley final.

But they can now start planning for a return to the top flight, with the club set to benefit by £80m according to one estimate from Sport Business Group Deloitte.

However, it may not all be plain sailing for Rangers, who made a £65.4m loss during the 2012-13 season and could yet face a huge fine at the end of the year under the Football League's financial fair play regulations if they suffer another heavy loss for the campaign just finished.

Bobby Zamora

None of this will matter to luckless Derby, who were the better side for large periods.

They have played with spirit, skill and freedom under manager Steve McClaren, who took over in September with the club 14th in the Championship table.

But the young Rams side will have to wait for at least another year if they are to return to the Premier League for the first time since their relegation in 2008.

Been there before?

4,264 - The total amount of appearances in the Premier League made by the 27 QPR players who have previously played in the top flight

QPR, rich in age and experience, initially looked the most accomplished but they created few clear openings - top scorer Charlie Austin shot over from distance and Joey Barton smashed a free-kick into the wall - and lost Niko Kranjcar to injury by break.

Derby lined up 4-3-3 with Will Hughes retaining his place in midfield despite the return to fitness of Craig Bryson as both teams were unchanged from their semi-final second-leg fixtures.

At first, the Rams looked like a young team suffering stage fright before slowly starting to impose themselves on the contest.

Craig Forsyth headed wide and the increasingly influential Hughes thought he had been caught inside the area by Richard Dunne after pulling off a Cruyff turn but his protests were ignored by referee Lee Mason.

Derby 0-1 QPR: Cruel way for Rams to lose - Steve McClaren

The nearest the game came to a goal before the end of a poor opening half was through a Jamie Ward free-kick that everybody missed except for Hoops keeper Green, who made a good scrambling save.

Austin shot wide after the restart but, that aside, Derby were clearly on top and the odds moved further in their favour when O'Neil was dismissed for his challenge on Russell just short of the penalty area. Rangers lost possession in midfield and O'Neil unquestionably snuffed out a goalscoring opportunity.

By now the momentum was firmly in Derby's favour and Green made a trio of saves to deny substitutes Craig Bryson and Simon Dawkins as well as Chris Martin.

It was one team holding on, another punching holes in the opposition defence and looking to strike a decisive blow but, after Derby failed to clear a throw-in and the soon-to-be inconsolable Rams captain Keogh scuffed his clearance, Zamora buried his effort from 10 yards as Rangers snatched victory.

You can listen to commentary of Bobby Zamora's winner on the BBC Radio 5 live website.

Lineup, Bookings (2) & Substitutions (6)

Derby County

  • 01 Grant
  • 33 Wisdom
  • 03 Forsyth
  • 34 Thorne
  • 06 Keogh
  • 25 Buxton
  • 08 Hendrick
  • 19 Hughes (Bryson - 68' )
  • 09 Martin
  • 11 Russell (Dawkins - 67' )
  • 10 Ward (Bamford - 92' )

Substitutes

  • 04 Bryson
  • 14 Eustace
  • 18 Sammon
  • 26 Legzdins
  • 27 Whitbread
  • 32 Dawkins
  • 35 Bamford

Queens Park Rangers

  • 01 Green
  • 02 Simpson
  • 06 Hill (Henry - 67' )
  • 17 Barton
  • 15 Onuoha
  • 05 Dunne
  • 23 Hoilett
  • 36 O'Neil Dismissed
  • 14 Doyle (Zamora - 57' Booked )
  • 09 Austin
  • 19 Kranjcar (Traore - 33' )

Substitutes

  • 03 Traore
  • 04 Morrison
  • 13 Yun Suk-young
  • 18 Hughes
  • 20 Henry
  • 25 Zamora
  • 26 Murphy
Ref: Lee Mason
Att: 87,348

Match Stats

Shots

16 11

On target

5 1

Corners

14 1

Fouls

11 10

Live Text Commentary

Full time

Full Time Match ends, Derby County 0, Queens Park Rangers 1.

90:00 +4:20 Full time

Full Time Second Half ends, Derby County 0, Queens Park Rangers 1.

90:00 +3:48

Attempt missed. Richard Keogh (Derby County) left footed shot from a difficult angle on the left misses to the right. Assisted by Patrick Bamford with a headed pass following a corner.

90:00 +3:20

Corner, Derby County. Conceded by Joey Barton.

90:00 +2:05

Foul by Simon Dawkins (Derby County).

90:00 +2:05

Bobby Zamora (Queens Park Rangers) wins a free kick on the right wing.

90:00 +1:10 Substitution

Substitution Substitution, Derby County. Patrick Bamford replaces Jamie Ward.

90:00 +0:40 Booking

Booking Bobby Zamora (Queens Park Rangers) is shown the yellow card for excessive celebration.

89:49 Goal scored

Goal! Goal! Derby County 0, Queens Park Rangers 1. Bobby Zamora (Queens Park Rangers) left footed shot from the centre of the box to the top left corner.

88:38

Attempt missed. Joey Barton (Queens Park Rangers) right footed shot from outside the box misses to the right.

86:25

Attempt saved. Jeff Hendrick (Derby County) right footed shot from outside the box is saved in the centre of the goal. Assisted by Simon Dawkins.

84:47

Foul by Simon Dawkins (Derby County).

84:47

Nedum Onuoha (Queens Park Rangers) wins a free kick in the defensive half.

83:16

Foul by Simon Dawkins (Derby County).

83:16

Danny Simpson (Queens Park Rangers) wins a free kick in the defensive half.

81:57

Attempt blocked. Simon Dawkins (Derby County) right footed shot from the left side of the box is blocked. Assisted by George Thorne.

80:22

Attempt blocked. George Thorne (Derby County) left footed shot from outside the box is blocked. Assisted by Chris Martin.

79:12

Richard Keogh (Derby County) wins a free kick in the defensive half.

79:12

Foul by Bobby Zamora (Queens Park Rangers).

78:31

Foul by Jamie Ward (Derby County).

78:31

Armand Traore (Queens Park Rangers) wins a free kick in the defensive half.

77:45

Corner, Derby County. Conceded by Armand Traore.

77:21

Attempt blocked. Jeff Hendrick (Derby County) right footed shot from outside the box is blocked. Assisted by George Thorne.

76:37

Corner, Derby County. Conceded by Karl Henry.

74:54

Attempt blocked. Jamie Ward (Derby County) left footed shot from the centre of the box is blocked.

74:51

Attempt saved. Simon Dawkins (Derby County) right footed shot from the centre of the box is saved in the top centre of the goal. Assisted by Craig Bryson.

73:42

Offside, Derby County. Chris Martin tries a through ball, but Simon Dawkins is caught offside.

69:47

Attempt missed. Richard Keogh (Derby County) header from the centre of the box misses to the left. Assisted by Jamie Ward with a cross following a corner.

69:12

Corner, Derby County. Conceded by Robert Green.

69:10

Attempt saved. Chris Martin (Derby County) right footed shot from a difficult angle on the right is saved in the bottom right corner. Assisted by Craig Bryson with a cross.

68:38

Corner, Derby County. Conceded by Robert Green.

68:36

Attempt saved. Craig Bryson (Derby County) right footed shot from the right side of the box is saved in the bottom right corner. Assisted by Jeff Hendrick.

67:02 Substitution

Substitution Substitution, Derby County. Craig Bryson replaces Will Hughes.

66:50 Substitution

Substitution Substitution, Derby County. Simon Dawkins replaces Johnny Russell.

66:15 Substitution

Substitution Substitution, Queens Park Rangers. Karl Henry replaces Clint Hill.

60:49

Foul by Chris Martin (Derby County).

60:49

Bobby Zamora (Queens Park Rangers) wins a free kick in the defensive half.

60:25

Corner, Derby County. Conceded by Richard Dunne.

60:22

Attempt blocked. Jamie Ward (Derby County) right footed shot from outside the box is blocked.

59:12 Dismissal

Dismissal Gary O'Neil (Queens Park Rangers) is shown the red card.

58:35

Johnny Russell (Derby County) wins a free kick in the attacking half.

58:35

Foul by Gary O'Neil (Queens Park Rangers).

57:45

Attempt missed. Charlie Austin (Queens Park Rangers) right footed shot from outside the box is high and wide to the right. Assisted by Junior Hoilett.

56:30 Substitution

Substitution Substitution, Queens Park Rangers. Bobby Zamora replaces Kevin Doyle.

56:04

Attempt missed. Charlie Austin (Queens Park Rangers) right footed shot from the centre of the box is close, but misses to the right. Assisted by Armand Traore with a cross.

54:18

Corner, Derby County. Conceded by Nedum Onuoha.

51:24

Corner, Derby County. Conceded by Nedum Onuoha.

50:52

Corner, Derby County. Conceded by Danny Simpson.

50:14

Corner, Derby County. Conceded by Richard Dunne.

48:26

Foul by Will Hughes (Derby County).

48:26

Joey Barton (Queens Park Rangers) wins a free kick in the defensive half.

45:00

Second Half begins Derby County 0, Queens Park Rangers 0.

45:00 +1:01 Half time

Half Time First Half ends, Derby County 0, Queens Park Rangers 0.

43:51

Attempt missed. Armand Traore (Queens Park Rangers) left footed shot from outside the box misses to the right. Assisted by Clint Hill following a fast break.

42:32

George Thorne (Derby County) wins a free kick in the defensive half.

42:32

Foul by Kevin Doyle (Queens Park Rangers).

41:52

Foul by Andre Wisdom (Derby County).

41:52

Clint Hill (Queens Park Rangers) wins a free kick in the defensive half.

40:07

Corner, Derby County. Conceded by Robert Green.

39:27

Jamie Ward (Derby County) wins a free kick on the left wing.

39:27

Foul by Nedum Onuoha (Queens Park Rangers).

37:31

Jamie Ward (Derby County) wins a free kick in the defensive half.

37:31

Foul by Danny Simpson (Queens Park Rangers).

36:10

Attempt blocked. Armand Traore (Queens Park Rangers) left footed shot from outside the box is blocked. Assisted by Kevin Doyle with a headed pass.

35:45

Attempt saved. Johnny Russell (Derby County) left footed shot from outside the box is saved in the bottom left corner. Assisted by Jeff Hendrick.

35:23

Richard Keogh (Derby County) wins a free kick on the right wing.

35:23

Foul by Charlie Austin (Queens Park Rangers).

33:00

Delay over. They are ready to continue.

32:50 Substitution

Substitution Substitution, Queens Park Rangers. Armand Traore replaces Niko Kranjcar.

32:28

Delay in match Niko Kranjcar (Queens Park Rangers) because of an injury.

31:45

Attempt missed. Will Hughes (Derby County) left footed shot from outside the box is too high. Assisted by Craig Forsyth.

29:12

Corner, Derby County. Conceded by Nedum Onuoha.

28:39

Corner, Derby County. Conceded by Richard Dunne.

28:37

Attempt blocked. Jamie Ward (Derby County) right footed shot from outside the box is blocked. Assisted by George Thorne.

25:14

Chris Martin (Derby County) wins a free kick in the defensive half.

25:14

Foul by Richard Dunne (Queens Park Rangers).

24:04

Attempt missed. Craig Forsyth (Derby County) header from a difficult angle on the right is too high. Assisted by Jamie Ward with a cross following a corner.

23:33

Corner, Derby County. Conceded by Junior Hoilett.

21:32

Foul by Chris Martin (Derby County).

21:32

Gary O'Neil (Queens Park Rangers) wins a free kick in the defensive half.

17:30

Attempt missed. Joey Barton (Queens Park Rangers) right footed shot from outside the box is high and wide to the right.

17:27

Attempt blocked. Niko Kranjcar (Queens Park Rangers) right footed shot from outside the box is blocked. Assisted by Clint Hill.

17:06

Attempt blocked. Kevin Doyle (Queens Park Rangers) left footed shot from outside the box is blocked.

15:13

Attempt blocked. Joey Barton (Queens Park Rangers) right footed shot from outside the box is blocked.

14:12

Foul by Richard Keogh (Derby County).

14:12

Charlie Austin (Queens Park Rangers) wins a free kick in the attacking half.

11:30

Foul by Jake Buxton (Derby County).

11:30

Charlie Austin (Queens Park Rangers) wins a free kick in the defensive half.

7:22

Attempt missed. Charlie Austin (Queens Park Rangers) right footed shot from outside the box is too high. Assisted by Joey Barton with a headed pass.

5:54

Corner, Queens Park Rangers. Conceded by Craig Forsyth.

4:52

Attempt blocked. Johnny Russell (Derby County) left footed shot from outside the box is blocked.

3:46

Will Hughes (Derby County) wins a free kick in the attacking half.

3:46

Foul by Gary O'Neil (Queens Park Rangers).

2:33

Foul by Andre Wisdom (Derby County).

2:33

Niko Kranjcar (Queens Park Rangers) wins a free kick in the defensive half.

2:04

Andre Wisdom (Derby County) wins a free kick in the defensive half.

2:04

Foul by Kevin Doyle (Queens Park Rangers).

0:50

Johnny Russell (Derby County) wins a free kick in the defensive half.

0:50

Foul by Niko Kranjcar (Queens Park Rangers).

0:00

First Half begins.

0:00

Lineups are announced and players are warming up.

Live data and text provided by our data suppliers