The win extended Rangers’ unbeaten run to 11 games in all competitions under manager Philippe Clement as they secured another three points in the league.
There were two changes from Sunday’s victory over St Mirren as Danilo replaced Cyriel Dessers in attack, while Ridvan came in for the injured Borna Barisic.
Rangers started with Butland in goal and a back four of James Tavernier, Connor Goldson, Leon Balogun and Ridvan.
The manager stuck with the same midfield from the weekend with John Lundstram, Tom Lawrence and Todd Cantwell starting there while Danilo was supported up front by Ross McCausland and Abdallah Sima.
It was Hearts who got the action underway at Tynecastle as Philippe Clement’s men looked to extend their unbeaten run in the league since the Belgian took charge in October.
From Rangers’ first corner of the match, it was Hearts who were able to get the first real chance in Edinburgh. It was Tavernier who played the corner short to Cantwell with Hearts breaking up the pitch through Lawrence Shankland and Kyosuke Tagawa. The former tried a shot from the edge of the box but it was high of the target.
Clement was forced into an early change with just 17 minutes on the clock at Tynecastle as Tom Lawrence went down injured and was unable to continue, he was replaced by Jose Cifuentes.
Ross McCausland had a shot blocked from inside the area as Rangers’ looked for a breakthrough in this match.
Hearts had probably the best chance of the game so far as Nathanial Atkinson was able to break forward down the right before picking out Shankland in the box. The Scotland international released a shot at goal which was pushed away by Jack Butland. Alex Cochrane met the rebound and looked almost certain to score but captain James Tavernier was on hand to block the powerful strike.
The ball was in the net for Rangers with half an hour played as Abdallah Sima’s shot was cleared by Hearts before Todd Cantwell touched it back towards goal, but Danilo was offside as he tapped beyond Zander Clark as the linesman raised his flag.
However, it wasn’t long until breakthrough came for Rangers with 34 minutes on the clock at Tynecastle and it was Abdallah Sima with his 13th goal in all competitions this season.
The move started with James Tavernier who played a one two with Ross McCausland deep in the Rangers half before the captain chested it down and drove forward through the heart of midfield. It was a perfect pass from Tavernier as he fed the ball into the path of Sima with the on loan Brighton forward showing composure to guide a lovely low finish beyond Zander Clark
With just two minutes of the first-half remaining, Lawrence Shankland lifted a ball over the top and into the path of Jorge Grant but his effort was comfortable for Butland as he gathered.
At the other end, Zander Clark pulled off a fantastic save late in the half as Leon Balogun flicked the ball into the path of Danilo following a Rangers corner, but his close-range effort was blocked by the feet of the Hearts goalkeeper.
Early in the second-half, Danilo had another opportunity as Tavernier’s free-kick was dropped by Zander Clark with Danilo picking up the ball in the box, but his shot was blocked by a Hearts body in the box.
Ridvan flashed a shot just wide of the target as he raced into an advanced position to get a left-footed shot away from a tight angle, but it was just wide of the target.
Connor Goldson saw a header deflected wide from a James Tavernier free-kick as Rangers looked for a second in Edinburgh. Zander Clark pulled off another good block with his feet as Ross McCausland struck the ball first time from a Ridvan corner, but the Rangers youngster was denied by the goalkeeper.
John Lundstram was next to have a long-distance strike pushed away by Clark, before Ridvan’s rebound drifted over the bar.
At the other end, Jack Butland denied Hearts an equaliser as Alan Forrest picked out Kenneth Vargas in space on the edge of the box, but the Rangers number one pulled off a superb stop to maintain Rangers lead at Tynecastle.
Rangers made two further changes with 20 minutes of the game remaining as Kemar Roofe was introduced for his first appearance since October alongside Dujon Sterling as they replaced Danilo and Ridvan.
Abdallah Sima saw a shot go inches wide as he controlled a long ball over the top from Connor Goldson to get an effort away at goal, but it bounced wide of the post.
A final change for Rangers with just over three minutes of the 90 remaining saw Todd Cantwell replaced by Sam Lammers as Rangers saw out the final period in Edinburgh to take all three points back along the M8.
RANGERS: Butland, Tavernier, Goldson, Balogun, Ridvan (Sterling, 70), Lundstram, Lawrence (Cifuentes, 17), Cantwell (Lammers, 87), McCausland, Sima, Danilo (Roofe, 70)
Subs: McCrorie, Souttar, Dessers, Matondo, Davies.
Hearts: Clark, Kent, Kingsley (McKay, 85), Baningime, Grant (Oda, 46), Nieuwenhof, Shankland, Atkinson (Vargas, 46), Rowles, Cochrane, Tagawa (Forrest, 65).
Subs: Gordon, Halkett, Harng, Sibbick, Denholm.