It was a sixth victory of the season and 28th in all for Hamilton, who closes the gap to Rosberg in the drivers’ championship from 29 to 22 points.
Hamilton benefited from a late-braking mistake on Turn One by Rosberg just over the halfway mark to grab back the lead he had lost immediately from pole position.
From then on there was no stopping the Briton, who won for the first time since the British Grand Prix four races back.
The victory helped make up for the disappointment of the last grand prix in Belgium when a collision with Rosberg early in the race left him out of the points.
Hamilton got off to a bad start, apparently caused by a power problem, and dropped from pole to fourth on the first turn, with Rosberg taking the lead.
McLaren’s Kevin Magnusson moved from fifth to second ahead of Felipe Massa in a Williams, but Williams team-mate Valtteri Bottas began poorly and lost eight places from third to 11th.
Both Massa and Hamilton got past Magnusson on lap five, and the Briton snapped Massa five laps later on the outside of Turn One.
Rosberg, who had lost some time after going straight on at Turn One a lap earlier, had to defend a lead of some 2 seconds before pitting for the first time on lap 25.
Hamilton came in a lap later and emerged still behind the German to be told over radio by his race engineer that “the race will be at the end” and to sit around two-and-a-half seconds behind Rosberg.
But just three laps later Rosberg, under mounting pressure from Hamilton, again misjudged Turn One and had to slalom pass the obstacles in the run-off straight, gifting his team-mate the lead.
There was disappointment on the same lap for home fans when Ferrari’s Fernando Alonso, who had been on the podium of the last four Italian grands prix, was forced to retire – a first mechanical failure for the Spaniard since 2009.
Hamilton soon stretched his lead to more than 4 seconds over Rosberg and took the chequered flag 3.175 seconds ahead of his team-maze – a seventh 1-2 finish for Mercedes this season.
Massa was just over 24 seconds back for third place and his first podium finish for Williams in his first season with the team.
Bottas fought back to cross fourth, while Red Bull’s Daniel Ricciardo got past Force India’s Sergio Perez, Magnusson and Red Bull team-mate Sebastian Vettel in an impressive charge to finish fifth.
Magnusson crossed the line seventh behind Vettel but dropped to 10th after being handed a five-second penalty for forcing Bottas off the track, with Perez, McLaren’s Jenson Button and Ferrari’s Kimi Raikkonen benefiting. –Sapa-dpa