The Rossoneri have made use of a clause which allowed them to bring the player to club after he spent last season on loan at San Siro
The Colombian spent last season on loan at San Siro and impressed during his spell back in Italy, and the Rossoneri have decided to activate their option to bring him to the club.
"AC Milan announce that they have exercised their right buy Cristian Zapata from Villarreal," a statement on the club's official website read.
The Colombian defender's contract will expire on June 30, 2016.
The 26-year-old began his career at Deportivo Cali in his homeland and first made the move to Serie A back in 2005.
He spent six years at Udinese before moving to El Madrigal in the summer of 2011 but Milan elected to bring him back to Italy before last season.
He made 23 league appearances for the club and recently revealed that he was desperate to remain at San Siro.