Paris Saint-Germain crashed to their first home league defeat of the season as Rennes clinched a Europa League place with a shock 2-0 French Ligue 1 win.
Benjamin Bourigeaud converted a penalty early in the second half and midfielder Adrien Hunou fired home a second for the visitors 20 minutes later.
The victory guarantees Rennes a top-six finish and keeps them three points above Nice, who hammered Caen at home, while fellow Europa League challengers St Etienne lost at Monaco.
Extra Europa League spots will be allocated for fifth and sixth place as PSG won both the domestic cups.
Rennes became the first side to win at the Parc des Princes in the league this season, while PSG, crowned champions four weeks ago, slumped to only their third defeat of the campaign.
Monaco leapfrogged Lyon into second place in the race for a Champions League place as Fabinho's stoppage-time penalty clinched a 1-0 home win against St Etienne.
Fabinho scored from the spot after Mathieu Debuchy's foul on Thomas Lemar and there was still time for Monaco's Rachid Ghezzal to be sent off in time added on.
Lyon slipped to third and could be overtaken by Marseille on the final day after Dmitri Lienard's stoppage-time free-kick snatched Strasbourg a 3-2 home win and guaranteed his side's survival.
Stephane Bahoken's opener for Strasbourg was cancelled out by Nabil Fekir's penalty and, after Lyon went ahead through Houssem Aouar, Nuno Da Costa headed an 88th-minute equaliser.
Nice kept their Europa League hopes alive as Mario Balatelli's double helped them to a 4-1 home win against Caen.
Balotelli struck twice in the opening 10 minutes, his second from the penalty spot, while Allan Saint-Maximin and Jean Michael Seri were also on target.
Caen's Ismael Diomande was shown a straight red card in the 55th minute for his foul on Balotelli.
Troyes remained in the relegation zone after they drew 1-1 at Montpellier.
Karim Azamoum's thunderbolt gave Troyes a half-time lead but Nicolas Cozza levelled for Montpellier just before the hour-mark.
Toulouse are 18th and in the relegation play-off spot as they lost 4-2 at Bordeaux.
Issiaga Sylla's opener for Toulouse was cancelled out by Martin Braithwaite, who struck again early in the second period before Lukas Lerager and Malcom put Bordeaux three goals ahead.
Issa Diop's last-minute goal was mere consolation.
Nantes won 2-0 at Angers courtesy of Lucas Lima's free-kick and Kalifa Coulibaly's second-half effort.
Lille's 2-1 home win against Dijon ensured their survival as they hit back through Lebo Mothiba's first-half double after South Korea midfielder Kwon Chang-hoon had given Dijon an early lead.
Amiens beat relegated Metz 2-0 at home thanks to Harrison Manzala's first-half penalty and Vahid Selimovic's own goal.