Dimitar Berbatov's double and an own goal put the hosts 3-0 up in the first half but Rangers, adrift in the bottom three, stormed back and Fulham were forced to cling on after midfielder Steve Sidwell was sent off 11 minutes from time.
Two errors from Rangers centre back Christopher Samba, signed for an undisclosed club record fee from Anzhi Makhachkala in January, helped Berbatov fire Fulham into a two-goal lead midway through the first half.
Samba tripped Ashkan Dejagah just inside the box and Berbatov scored from the penalty spot after eight minutes.
The Bulgarian striker doubled Fulham's lead with his 13th league goal of the season when Samba dwelt in possession on the edge of his own area and Berbatov seized on the loose ball to shoot past Julio Cesar.
Samba was not the only Rangers defender to suffer, Clint Hill putting through his own net on 41 minutes when John Arne Riise's cross hit him and flew in.
Adel Taarabt gave Rangers a lifeline with a well-taken goal just before halftime and soon after the restart Loic Remy's penalty, awarded after Taarabt was tripped by Giorgios Karagounis, was saved by Mark Schwarzer.
Remy quickly made amends when he smashed the ball home just minutes later from Stephane Mbia's through ball and Rangers had other chances to take at least a point after Sidwell was shown a straight red card for a rash challenge on Armand Traore.
Rangers, who have seven matches to play, are seven points adrift of safety. They remain 19th on 23 points, the same as bottom side Reading.
Aston Villa are 18th on 30 points, with Wigan Athletic just above the relegation places, also on 30 having played one game fewer.
- Sports & Recreation
- Dimitar Berbatov
- Christopher Samba