Carlos Martinez took a no-hitter into the sixth, Jeremy Hazelbaker and Brandon Moss hit home runs and St. Louis beat the Houston Astros 8-2.
Martinez (11-7) pitched seven innings of three-hit ball, allowing a run while striking out seven. He retired 15 of the first 16 batters before giving up a leadoff double to Teoscar Hernandez in the sixth.
Martinez had allowed 14 runs over his previous three starts.
Eight Cardinals batted in the three-run third, highlighted by Stephen Piscotty's two-run single and Yadier Molina's RBI double.
Hazelbaker bashed a 3-2 pitch from Fister in the fourth for his first home run since July 29. Moss blew it open in the seventh with a three-run homer off Tony Sipp.
The Cardinals have won four straight and have a slim lead for the second NL wild-card spot over the Pirates and Marlins.
Adam Wainwright (9-7, 4.72 ERA) starts against Philadelphia on Friday.