Paris St Germain crashed to their first home league defeat of the season as Rennes clinched a Europa League place with a shock 2-0 win.
Benjamin Bourigeaud converted a penalty early in the second half and midfielder Adrien Hunou fired home Rennes’ second 20 minutes later.
Rennes’ victory guarantees them a top-six finish and keeps them three points above Nice, who beat 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 domestic cups.
The Red and Blacks became the first side to win at Parc des Princes in Ligue 1 this season, while PSG, crowned champions four weeks ago, slumped to only their third overall defeat.
Angel Di Maria tested Rennes goalkeeper Tomas Koubek inside the opening minute and hit the crossbar with another fierce effort from outside the penalty area soon after.
Kylian Mbappe then headed Thomas Meunier’s cross off target, but after an early onslaught PSG took their foot off the pedal and Rennes had their first chance when Hunou headed James Lea Siliki’s cross wide.
Algeria defender Ramy Bensebaini also went close for Rennes before Koubek comfortably saved PSG midfielder Christopher Nkunku’s shot.
The Parisiens spurned another chance just before half-time when Mbappe fired high and wide from inside the box after good work by Di Maria.
After a goalless first period, Rennes stunned the home crowd early in the second by taking the lead via a penalty.
Hunou was adjudged to have been fouled by Thiago Motta in the area and midfielder Bourigeaud tucked his spot-kick into the bottom corner.
Rennes went in search of a second goal. Mehdi Zeffane’s effort was blocked and Bensebaini tried his luck from outside the box but his shot flew off target.
Di Maria twice went close to hauling PSG level when he shot wide and saw another effort saved in the bottom corner two minutes later.
But Rennes doubled their lead in the 71st minute when Hunou lashed home a low, angled drive from the right side of the area.
PSG poured forward in a bid to rescue the game. Di Maria’s shot was blocked, Mbappe blazed his effort over the crossbar and Javier Pastore’s header was brilliantly saved by Koubek.
Rennes, who have lost only one of their last 13 matches, stood firm in the closing stages to secure a place in Europe next term.