Barcelona 0-3 Bayern Munich
Bayern Munich clinched top spot in Group C after with a 3-0 win over FC Barcelona at Spotify Camp Nou.
Barca were out of contention for a place in the last 16 after Inter Milan thrashed Viktoria Plzen in the earlier kickoff as Robert Lewandowski started against his former side.
The German side had a perfect start after Sadio Mane gave them the lead on ten minutes after a through ball by Serge Gnabry from a counter-attack.
Julian Nagelsmann's charges capitalised on another transitional moment on the half-hour mark after Choupo-Moting doubled their lead from an offload by Gnabry.
Barcelona had a penalty overturned from a Video Assistant Referee (VAR) review after Lewandowski went down in the box from a challenge by Matthijs de Ligt.
Benjamin Pavard rubbed salt into the wounds of Blaugrana with the third goal in stoppage time.
Ajax Amsterdam 0-3 Liverpool
Liverpool booked their spot in the knockout stages with a match to spare in Group A and eliminated Ajax Amsterdam after a 3-0 win at Johan Cruijff Arena.
The Reds made three changes from their narrow loss against Nottingham Forest, as Darwin Nunez, Trent Alexander-Arnold and Jordan Henderson were all recalled.
Ajax continued to unsettle Liverpool but the Dutch side were caught from a possession turnover just before the interval as Mohamed Salah broke the deadlock for Jurgen Klopp's charges following a through ball by Henderson.
The English giants had a quick start in the second stanza as Nunez doubled their lead with a header from a corner and Harvey Elliot put them out of sight seven minutes in after a through ball by Salah.
Ajax will have to settle for a spot in the Europa League, as they are virtually through.
Atletico Madrid 2-2 Bayer Leverkusen
A stoppage time penalty miss by Yannick Carrasco denied Atletico Madrid a chance to qualify for the last 16 after a 2-2 draw against Bayer Leverkusen in the penultimate round at Wanda Metropolitano.
Moussa Diaby gave Leverkusen an early lead and Yannick Carrasco found the equaliser for Atletico on 22 minutes.
Callum Hudson-Odoi restored the lead for the visitors around the half-hour mark but Rodrigo De Paul pulled Diego Simeone's charges level again early in the second stanza.
Atletico were awarded a penalty in the eighth minute of stoppage time for a handball in the box after a Video Assistant Referee (VAR) review, but Carrasco's spot-kick was kept out by goalkeeper Lukas Hradecky and Saul Niguez fired the rebound onto the crossbar.
Napoli 3-0 Rangers
Napoli progressed to the round of 16 with a match remaining in Group A after cruising to a 3-0 win over Rangers at Stadio Diego Maradona.
Giovanni Simeone scored two early goals separated by five minutes to put Napoli in the driving seat.
Leo Ostigard put the game beyond doubt for the Italian side ten minutes before time.
Tottenham Hotspur 1-1 Sporting CP
Tottenham Hotspur missed the chance to qualify for the last 16 with a match to spare in Group D after a stoppage time disallowed goal in their 1-1 draw with Sporting CP at Tottenham Hotspur Stadium.
Marcus Edwards broke the deadlock for Sporting on 22 minutes against his former team with a strike from the edge of the box.
Rodrigo Bentancur restored parity for Antonio Conte's charges ten minutes before time with a header from Ivan Perisic's corner.
Kane thought he had netted the winner for Spurs with a header in stoppage but the goal was chalked off by the Video Assistant Referee (VAR) for offside.
Conte, who had celebrated the goal wildly, was red-carded after protesting the decision.
Eintracht Frankfurt 2-1 Olympique Marseille
Eintracht Frankfurt kept their hopes of qualifying for the last 16 alive after edging Olympique Marseille 2-1 in an open Group D ahead of the final round at Deutsche Bank Park.
Daichi Kamada sent Eintracht ahead in just the third minute and Matteo Guendouzi levelled matters for Marseille on 22 minutes.
Randal Kolo Muani restored the lead for the German side five minutes later and that proved to be the winner.
You must be SIGNED IN to read and post comments.