Moehler pitched his best game of the season and the Astros scored three runs on two St. Louis errors in their 6-1 victory over the Cardinals.
Moehler (3-2) allowed two hits and struck out five in seven innings, his longest outing of the year. He set down the Cardinals in order four times and retired the last eight batters he faced.
His strategy was simple: throw strikes early in counts and let the Cardinals hit him.
"I haven't changed the way I've pitched since day one of my career," said the 36-year-old Moehler. "I've always been a control guy, for the most part, throwing strikes. Let our defense make the plays. I'm not going to go out there and strike out 10 guys."
Hunter Pence had an RBI double and Geoff Blum added a solo homer as the Astros scored more than three runs for the first time in nine games.
Houston manager Cecil Cooper shook up his lineup after the Astros lost seven of eight. He benched four regulars and had Pence in the leadoff spot instead of Michael Bourn.
It worked. Besides Blum's homer, Darin Erstad doubled and scored and Mark Loretta went 4-for-4.
"It serves two purposes," Loretta said. "You try to get a couple of guys a little bit of rest who've been grinding and then you get some of the reserve guys swinging the bats. Sometimes, it works out."
Braden Looper (7-5), facing the Astros for the fourth time this season, matched a career high with seven strikeouts and gave up two earned runs and eight hits in six innings.
The Cardinals' defense broke down in the fourth as the Astros stretched the lead to 5-0.
Erstad led off with a double and Looper hit Lance Berkman in the foot with a pitch. Carlos Lee hit a bouncer to Cesar Izturis and the shortstop slipped as he made his move to field it. He still tried to start a double play, but his errant throw to Adam Kennedy sailed into foul territory down the right-field line. Erstad and Berkman scored and Lee reached third on Izturis' error.
Blum then hit a grounder to first baseman Albert Pujols, who threw home to get Lee, but Yadier Molina dropped the ball and Lee scored. Molina was charged with an error.
The Cardinals played a doubleheader in Washington on Thursday and arrived at their hotel in Houston well after midnight. But St. Louis manager Tony La Russa didn't blame the mistakes on fatigue.
"It didn't have anything to do with the long day," La Russa said. "That's just baseball. We were ready to play."
Loretta blooped a single to right leading off the Houston third. He was forced on Humberto Quintero's grounder, but Quintero scored on Pence's two-out double off the right-field wall. Pence then scored on Kaz Matsui's single to center. Matsui was caught in a rundown after Pence crossed the plate.
Moehler allowed only one walk in the first three innings. Skip Schumaker started the fourth with a single, but Moehler retired the next three batters.
"Moehler was the story," La Russa said. "We couldn't do anything with him."
The Cardinals were second in the NL with a .987 fielding percentage coming into the game and had committed only 32 errors all season.
"They usually capitalize on everybody else's (mistakes)," Loretta said. "We probably caught them on a pretty good night. They were coming off a doubleheader and got in late. That's a good team. We'll take this one."
Moehler threw only 78 pitches in the first six innings. Pence made a running catch on Pujols' soft liner to right to end the sixth and Moehler retired the Cardinals in order in the seventh.
Moehler lobbied to pitch the eighth, but Cooper decided to take him out. Geoff Geary relieved in the eighth and gave up an RBI single to Schumaker.
Blum homered to right in the eighth off Mitchell Boggs, who was making his major league debut. Boggs was called up from Triple-A Memphis on Thursday night.
Jose Valverde struck out the side in the ninth for Houston.
Pence has 31 RBI since April 18. ... Pujols went 0-for-4. He was bothered by a strained left calf earlier this week. ... OF Rick Ankiel was getting examined by doctors in St. Louis for an infection in his right knee. Ankiel has missed the Cardinals' last four games. RHP Todd Wellemeyer, who pitched six innings in the Cards' 4-1 win over Washington on Thursday, was back in St. Louis because of inflammation in his right elbow.