Rangers remain in the hunt for the Europa League last 32 after Steven Gerrard's side survived 45 minutes with 10 men to claim what could yet be a crucial point from Villarreal.

A controversial red card for Daniel Candeias just before half-time left Gers up against it.

But for the second time in this campaign, the Light Blues frustrated the Yellow Submarine as they battled to a merited 0-0 draw at Ibrox.

And it leaves their destiny firmly in their own hands - with victory against Rapid Vienna in Austria in two weeks' time guaranteeing passage to the knock-out rounds.

Sporting Lisbon progressed as runners-up behind Arsenal in Group E with a 6-1 thumping of Qarabag in Azerbaijan as Bruno Fernandes and Abdoulaye Diaby both scored twice.

Italian giants AC Milan survived a major fright against Luxembourg minnows Dudelange at the San Siro, trailing 2-1 midway through the second period against a team that had lost all four of their group games.

But a major upset was averted with four goals in a 15-minute spell as Fabio Borini's strike sealed a nervy win that leaves AC Milan second in Pool F, one point behind Real Betis, who were 1-0 conquerors of Olympiakos and reached the round of 32 thanks to Sergio Canales' strike.

Zenit St Petersburg's 1-0 home win against Pool C rivals FC Copenhagen - Robert Mak scored the only goal after 59 minutes - saw them win their group, but Slavia Prague's hopes of joining them were dented by a 2-0 defeat in Bordeaux.

Milan had a let-off at the San Siro

There were no goals in either Group D game, with Fenerbahce qualifying along with group winners Dinamo Zagreb following their draw in Istanbul, while Anderlecht and Spartak Trnava also played out a scoreless encounter.

Bayer Leverkusen stayed top of Group A, despite being held 1-1 at home by Ludogorets, as Zurich, who had also qualified with Leverkusen, suffered a surprise 2-1 defeat against already-eliminated visitors Lanarca.

Goals in the last 10 minutes by Mert Mulder and Philipp Schobesberger nudged Rapid Vienna to the top of Group G as they beat Spartak Moscow, and Dinamo Kiev ensured top spot in Pool K as Benjamin Verbic's first-half goal proved enough to take the points against hosts Astana.

Frankfurt fans were celebrating

Krasnodar, meanwhile, qualified in Group J after beating Akhisar 2-1, and BATE Borisov saw off Vidi 2-0 in Group L.

Elsewhere, Jeremain Lens netted a stoppage-time winner to give Besiktas a 3-2 victory against Group I hosts Sarpsborg, while group leaders Genk drew 2-2 with Malmo.

Eintracht Frankfurt maintained their 100 per cent Group H record by crushing Marseille 4-0, and Lazio are also through despite a 2-0 defeat against Apollon Limassol. Standard Liege remained in Group J contention by beating Sevilla 1-0, and Rennes stayed afloat by winning 1-0 against Jablonec in Group K.

Scott Sinclair's goal three minutes before half-time gave Celtic a crucial 1-0 victory over Rosenborg in Trondheim.

And with RB Leipzig losing by the same scoreline to Group B winners Red Bull Salzburg, it means that Celtic need a point from their final game at home to Salzburg to confirm their qualification.