Rangers moved to within two points of Scottish Premiership leaders Celtic with a game in hand after a Nikola Katic header gave them a 2-1 win in the Old Firm derby - their first victory at Celtic Park since 2010.
Celtic spurned the chance to take the lead in the 32nd minute when Ryan Christie saw his penalty saved by Allan McGregor after Katic was adjudged to have fouled Christopher Jullien from a corner.
Ryan Kent's brilliant first-time effort (36) then gave Rangers the lead, but the advantage only lasted five minutes as Odsonne Edouard equalised for the home side after Callum McGregor's shot deflected off the Frenchman.
Rangers striker Alfredo Morelos was sent off in stoppage time after he was adjudged to have dived by referee Kevin Clancy while already on a yellow card but it made no difference to the end result.
How Rangers closed the gap at the top of the table
Celtic went into the game on the back of 11 straight wins and were unbeaten domestically at home this season, but Rangers were the team who started on the front foot as the hosts were sloppy in possession.
Fraser Forster was imperious in the League Cup final at Hampden three weeks ago and he needed to be on his toes again to deal with low balls into the box as Rangers overwhelmed Celtic in winning back possession and breaking time and again.
The goalkeeper saved two efforts from Morelos, who was a source of constant frustration for the Celtic defence, and also had to deny Steven Davis with a good stop with his feet after Celtic failed to clear from a corner.
Mikey Johnston and Christie were doing their level best to give Celtic some impetus but the latter elected to shoot when through on goal instead of squaring to Edouard.
Celtic then had a great chance to take the lead when Katic was adjudged to have fouled Jullien in the box from a corner, but McGregor got down brilliantly to beat Christie's penalty away.
Davis then had to be alert to clear a Kristoffer Ajer header off the line as the hosts increased the pressure.
However, Rangers were ahead just a few minutes later. Borna Barisic took his time down the left and crossed low into the box for Kent, who placed his effort in off the post.
Celtic were level soon, however, when McGregor's shot from the edge of the box appeared to take a deflection off the hand of Edouard and deflected past Allan McGregor.
Morelos had a golden chance to score his first goal against Celtic five minutes after the break after meeting Kent's inch-perfect cross, but he could only blast the ball over under pressure from Ajer.
Katic went close to connecting to Barisic's corner a few minutes later but made no mistake with the follow-up delivery, rising well above everyone in the box to power his header past Forster.
Davis was then on hand to once again clear a header off the line - this time Jullien going close - before Edouard brought out a brilliant save from McGregor.
Rangers could have made it 3-1 when Morelos did well to hold up the Celtic defence before laying off for Joe Aribo, who could only fire wide.
Morelos then picked up a yellow card for a foul on Scott Brown with five minutes remaining and was ordered off in stoppage time for a second yellow card for trying to win a penalty in the Celtic box.
The incident sparked a reaction on the touchline but it made no difference to the result as Rangers collected a deserved three points at the home of their fiercest rivals.