Match ends, Luton Town 1, Reading 0.
Harry Cornick secured a Championship play-off place for Luton after an embarrassing mistake by Reading goalkeeper Orjan Nyland, which will be destined for the bloopers archive.
Cornick's goal in first-half stoppage time ensured the Hatters finished sixth in the table, and they will now face Huddersfield in the play-off semi-finals as their Premier League dream lives on.
The goal came after Norwegian Nyland rolled the ball to the top of his penalty area as he prepared to clear, totally unaware that Cornick was hiding behind him.
To his horror, the Luton striker sprinted into view, touched the ball into space, swivelled and turned the ball into an empty net with his right boot as the hapless goalkeeper looked on.
Eight years after they were a non-league side, Luton knew victory would secure their place in the Championship top six, but they had to respond to Monday's 7-0 humiliation at Fulham.
Reading were already safe but this was their 25th defeat of the season. Paul Ince's side finished 21st, four points above the bottom three.
Luton should have gone ahead in the opening minutes as Cameron Jerome was sent through on goal, but he could not beat Nyland.
Jerome came close in the second half as he crashed a shot against the bar and James Bree also curled a free-kick just wide.
The insurance goal would not come for Nathan Jones' side but scores elsewhere ensured a peaceful finale for the home side - with Middlesbrough and Millwall both losing.
Reading came close to an equaliser midway through the second half but Matt Ingram saved Michael Morrison's back-post header from Josh Laurent's cross.
Luton manager Nathan Jones told BBC Three Counties Radio:
"We were aware of the scores elsewhere so there weren't too many nerves.
"I'm just glad we won the game and we got to 75 points, which was our goal at the start of the season.
"We've had a magnificent season, we were here two years ago to stay in the league and now we've got an opportunity to get out of the league.
"I'm so proud of the whole club."
Reading manager Paul Ince told BBC Radio Berkshire:
"I told the boys to go and express themselves but we started slow and since I've been here we have times we start slow and it's cost us.
"It was down to one moment and you feel for the goalkeeper because he also made a tremendous save.
"I was just glad we didn't need a point today.
"Second half I thought we were excellent and deserved an equaliser."
- 22CampbellSubstituted forSnodgrassat 78'minutes
- 35JeromeSubstituted forHyltonat 90'minutes
- 7CornickSubstituted forMuskweat 67'minutes
- 14Mendes Gomes
- 3HolmesSubstituted forAbrefaat 84'minutes
- 21BabaBooked at 41mins
- 11MeiteSubstituted forScottat 74'minutes
- 23HoilettSubstituted forDele-Bashiruat 78'minutes
- 18Lucas João
- Jeremy Simpson
- Shots on Target
Second Half ends, Luton Town 1, Reading 0.
Foul by Kelvin Abrefa (Reading).
Amari'i Bell (Luton Town) wins a free kick on the left wing.
Foul by Josh Laurent (Reading).
Henri Lansbury (Luton Town) wins a free kick in the defensive half.
Foul by Rashawn Scott (Reading).
Jordan Clark (Luton Town) wins a free kick in the defensive half.
Offside, Luton Town. James Bree tries a through ball, but Danny Hylton is caught offside.
Foul by Tom Dele-Bashiru (Reading).
Henri Lansbury (Luton Town) wins a free kick in the attacking half.
Substitution, Luton Town. Danny Hylton replaces Cameron Jerome.
Ovie Ejaria (Reading) wins a free kick in the defensive half.
Foul by Robert Snodgrass (Luton Town).
Substitution, Reading. Kelvin Abrefa replaces Thomas Holmes because of an injury.
Lucas João (Reading) wins a free kick in the attacking half.
Foul by Reece Burke (Luton Town).
Attempt missed. Michael Morrison (Reading) right footed shot from outside the box is too high. Assisted by Tom McIntyre.
Attempt missed. Rashawn Scott (Reading) right footed shot from the centre of the box is close, but misses to the right. Assisted by Ovie Ejaria.
Substitution, Reading. Tom Dele-Bashiru replaces Junior Hoilett.