Ten days after thrashing the Serie A leaders in their own back yard by a 4-0 scoreline, Scudetto holders Milan prevailed once again on the European stage, with Ismael Bennacer netting his first-ever Champions League goal and what proved to be the match-winner on the stroke of half time.
Napoli were the dominant side for much of the contest, but they struggled to breach Milan's resilient backline and the dismissal of Andre-Frank Zambo Anguissa in the final 20 minutes helped the hosts on their way to recording a hard-fought victory.
The major talking point before kickoff was the absence of Napoli's top scorer Victor Osimhen due to injury, and with Giovanni Simeone also on the treatment table, Eljif Elmas was selected to start as a false nine, with striker Giacomo Raspadori only named on the substitutes' bench.
Napoli started on the front foot and came close to taking an early lead with their first attack after just 50 seconds, with Milan failing to clear their lines before captain Davide Calabria made a crucial block on the line to prevent wing wizard Khvicha Kvaratskhelia's strike from hitting the target.
Piotr Zielinski tried his luck from the edge of the area with a powerful left-footed strike 10 minutes later, but a strong right hand of Milan goalkeeper Mike Maignan was equal to it, before Giovanni Di Lorenzo headed a close-range effort over the crossbar following a corner.
Napoli has a total of nine shots on goal before Milan had their first on the 25-minute mark when Rafael Leao picked the ball up inside his own half and burst into the visitors' box before rolling a left-footed strike narrowly wide of the far post.
The visitors controlled proceedings in the opening half-hour, with a midfield triumvirate of Zielinski, Anguissa and Stanislav Lobotka preventing Milan from dictating play with their intense pressing.
However, the first time Milan managed to break through Napoli's midfield resulted in the hosts making the breakthrough six minutes before half time, with Brahim Diaz the architecture of a well-worked move.
Milan's No.10 weaved his way through two Napoli players and drove towards the penalty area before finding Leao on the right channel, whose cross into the danger zone was flicked on by Diaz towards the on-rushing Bennacer who fired an unstoppable first-time effort beyond Alex Meret.
With tempers flaring between both sides as the first half came to a close, Napoli were fortunate not to be two goals down at the break as Simon Kjaer smacked a header from just six yards out onto the underside of the crossbar in the third minute of first-half stoppage time.
After a quite first half from false nine Elmas, the North Macedonia international tested Maignan with a looping header four minutes after the break which required Milan's goalkeeper to tip the ball onto the crossbar and out for a corner.
Milan enjoyed a spell of resilient defending, preventing Napoli from creating any clear-cut opportunities, and as a result, Spalletti decided to call upon Raspedori with 20 minutes remaining to provide a much-needed spark in the final third.
However, Napoli's hopes of restoring parity were dealt a major blow when Anguissa was shown two yellow cards within the space of just four minutes, with his second awarded for a high boot into the midriff of Lucas Hernandez.
A booking for star centre-back Kim Min-jae shortly after rubbed salt into Napoli's wounds, with the South Korea international now suspended, along with Anguissa, for the second leg.
Despite going a man down, Napoli came close to equalising in the 87th minute through Di Lorenzo, but his shot from a tight angle was brilliantly tipped over the crossbar by Maignan.
The absence of top scorer Osimhen was ultimately felt by a Napoli side who lacked a cutting edge in attack, and Milan eventually held on to claim a first-leg advantage in the all-Italian tie.
Before hosting the second leg next Tuesday, Napoli will turn their attention back to Serie A with a home encounter against Hellas Verona on Saturday, while Milan will travel to Bologna.