Lee McCulloch and Dorin Goian both saw red, ruling them out of Wednesday’s clash at Celtic Park, as Saints secured their first win over Rangers since 2008.
Lee Wallace opened the scoring with his maiden goal for the Scottish champions but the home side took advantage of McCulloch’s first-half dismissal and hit back through goals from Aaron Mooy and Paul McGowan to secure the win before Rangers lost Goian late on to a second booking.
Rangers made three changes from the 2-1 win over Inverness for the match. Kyle Lafferty, who came off the bench to score the winner last week, started, along with McCulloch and Goian, who recovered from illness.
Sone Aluko had to settle for a place on the bench after serving a two-match ban for diving.
Saints drafted fit-again Lee Mair into the side and Mooy also started for the home side, while skipper Jim Goodwin began the first of a three-game suspension.
Rangers tried to pile on the pressure straight away and Gregg Wylde had a go after cutting inside from the left but he fired across goal and wide with Lafferty screaming for the ball a few yards out.
The Northern Irishman then had a chance of his own when he raced onto a Steven Davis pass only to drag his effort past the post from just inside the box.
At the other end, a low shot from McGowan was smothered by goalkeeper Allan McGregor, before Rangers opened the scoring with 11 minutes gone.
Sasa Papac was the provider with a lovely pass for Wallace who forced his way past Marc McAusland before rifling past Craig Samson to claim his first goal for the club.
The visitors had the ball in the net again when Wylde’s swerving free-kick slipped past Samson but the effort was ruled out for an offside.
Rangers suffered a setback when McCulloch was shown a straight red card after 24 minutes for violent conduct after clashing with Graham Carey, who was booked by referee Steven McLean earlier in the game for a foul on McCulloch.
Manager Ally McCoist made his first change of the game five minutes later when Wylde was withdrawn for the introduction of Maurice Edu.
Saints, boosted by the numerical advantage, almost levelled when Kenny McLean delivered a low corner to Steven Thompson at the near post and his flick forced a decent save from McGregor.
But the Rangers goalkeeper was left plucking the ball out of the back of the net a minute before the break when Mooy lashed home in off the inside of the post, before McGowan met a David van Zanten pass and claimed Saints’ second of the day in injury time.
Saints swapped Carey for Gary Teale at half-time, while Lafferty made way for Aluko as Rangers made their second substitution.
Aluko almost had a swift impact on the game five minutes after the restart with a well-struck shot but he was off-target and the effort rippled the side-netting.
Saints could have added to their lead when Teale’s free-kick found McAusland at the back post but he stabbed inches wide, squandering a decent opportunity.
Rangers then almost levelled through Nikica Jelavic but the club’s top goalscorer drove past the upright without causing any real problems for the Saints goalkeeper.
With just over an hour gone, Hugh Murray came off the bench to make his first appearance of the season after recovering from knee surgery, as he replaced goalscorer Mooy.
Rangers pushed forward in search of the goal that could spark a comeback, and Aluko was causing some problems down the flank, but Saints defended resolutely.
Rangers’ hopes were then all but dashed when they were reduced to nine men when Goian – booked earlier for a tug on Teale’s jersey – was cautioned again with three minutes to go for a foul on McLean.
Papac came to the rescue to prevent Rangers falling further behind when he cleared a McGowan effort off the line in injury time in what was a miserable day for McCoist’s men.