France had a nightmare evening, losing key man Franck Ribery to a serious injury after only seven minutes.
Eric Abidal was then sent off after 25 minutes for fouling Luca Toni to give away a penalty, scored by Andrea Pirlo.
Thierry Henry then deflected in Daniele De Rossi's 30-yard free-kick after 62 minutes, with Italy going through after the Netherlands beat Romania.