Chelsea qualified for the knockout stage despite a limp performance that resulted in a 1-0 loss to FC Basel, its second defeat to the Swiss champion in Group E.
Mohamed Salah's fine goal three minutes from time earned the home side a deserved victory at St Jakob Park and completed a double over Jose Mourinho's Chelsea.
However, Schalke's 0-0 draw at Steaua Bucharest means the Blues advance to the last 16 ahead of the Matchday 6 meeting at home to the Romanian side.
Jack Wilshere scored both goals as Arsenal beat Marseille 2-0 at the Emirates Stadium to all but secure a place in the next round.
The Gunners now need just a point from their final Group F game at Napoli, after the Italian side was beaten 3-1 by Borussia Dortmund.
A beaten finalist in May, and victim to Bayern Munich once again at the weekend, Dortmund had struggled to recreate last season's swashbuckling group-stage performances and was trailing Serie A runners-up Napoli by three points ahead of the Matchday 5 game.
But an early penalty from Marco Reus gave it the upper hand before second-half goals from Jakub Blaszczykowski and substitute Pierre-Emerick Aubameyang ruled Lorenzo Insigne's response irrelevant.
Celtic crashed out of Europe after a thumping 3-0 defeat by AC Milan in the Group H clash at Parkhead.
Brazilian star Kaka put the visitor ahead, with Cristian Zapata and Mario Balotelli also on the scoresheet for the Italian giant.
Ajax produced a superb win over Barcelona to keep alive its hopes of qualifying from Group H.
Ajax took a shock 2-0 half-time lead as both Thulani Serero and Danny Hoesen netted their first European goals before Xavi scored a penalty after Joel Veltman was sent off, with the Dutch side withstanding fierce pressure in the remainder of the second half.
Porto's hopes of reaching the knockout stage were dealt a major blow as itcould only draw at home to Austria Wien.
Roman Kienast smashed in Vienna's first goal of the group stage so far after 11 minutes before Jackson Martinez levelled shortly after half-time.
Zenit St. Petersburg enjoyed a huge slice of fortune but is still yet to book a place in the last 16 after a 1-1 draw with Atletico Madrid.
Adrian put the Spanish side ahead in the 53rd minute before an absolute fluke goal - when highly-rated goalkeeper Thibaut Courtois completely miscalculated a straightforward tip-over from Toby Alderweireld's defensive header - saved Zenit in the 74th minute.