QPR’s winning run came to an end at Kenilworth Road, where Luke Freeman scored against his former club and defenders Jimmy Dunne and Leon Balogun both suffered injuries.
Elijah Adebayo opened the scoring for Luton and their lead was doubled by Dunne’s own goal following a mistake by Tim Iroegbunam.
Rob Dickie’s injury-time goal gave Rangers hope but Freeman then netted for the Hatters.
It was a miserable afternoon for Rangers, who had won their previous three matches and would have gone top of the Championship with another victory.
Balogun was selected at right-back in the absence of Ethan Laird, partly because of the veteran’s aerial presence.
But Balogun was hurt as he landed awkwardly in the opening stages and he had to be replaced by Osman Kakay after 14 minutes.
And Luton went ahead four minutes later through Adebayo’s far-post header from Carlton Morris’ left-wing cross.
They almost scored again when Adebayo headed James Bree’s cross against the inside of the post.
Rangers hit the woodwork themselves in the second half when Stefan Johansen’s free-kick was cleared as far as Jake Clarke-Salter, who fired against the bar from 10 yards out.
The visitors were pushing for an equaliser when a defensive mix-up led to the second goal.
After on-loan Aston Villa youngster Iroegbunam had given the ball away, keeper Seny Dieng raced from his line in an attempt to help Dunne thwart Adebayo.
The ball ended up in the net after ricocheting off Dunne, who collided with Dieng and was subsequently helped from the field.
QPR managed to pull a goal back when Dickie’s header bounced in off Luton keeper Ethan Horvath’s back.
But Rangers were quickly undone again at the other end, with Harry Cornick getting in on the right and teeing up Freeman for a tap in.
QPR (4-3-2-1): Dieng; Balogun (Kakay 14), Dunne (Dozzell 79), Clarke-Salter, Paal; Field (Dickie 63), Iroegbunam, Amos (Johansen 63); Chair, Roberts (Richards 79); Dykes.
Subs not used: Archer, Adomah.