The deal was announced as the switch-hitting Lopez was seen wearing uniform No. 8 as the Cardinals prepared for workouts in the spring training home of Jupiter, Fla., MLB.com reported.
"I've wanted to be here for a long time," Lopez told the Web site. "I've made a lot of changes, and it's going great so far."
Lopez, 29, finished the last two months of the 2008 season with the Cardinals, rejuvenating his career by hitting .385 in 43 games. The St. Louis Post-Dispatch reported that Lopez's base salary will be less than $2 million plus performance incentives.
"We are excited to have Felipe back in a Cardinals uniform," said Cardinals general manager John Mozeliak in a statement. "As a switch hitter who can play multiple positions, he gives us tremendous versatility. We feel he's going to be a great addition to our club."
MLB.com said Lopez split last season between Arizona and Milwaukee, hitting .310 with a .383 on-base percentage and a .427 slugging percentage in 151 games.