PHILADELPHIA — Chad Bettis thought he was now just four outs from a no-hitter before he turned around and saw nobody was there to field Cody Asche's routine grounder.
Asche singled through a shift to end Bettis' no-hit bid with one out in the eighth. Bettis (2-0) lost a perfect game in the seventh when shortstop Tulowitzki made an error on Ben Revere's grounder up the middle.
"Initially, I thought it was right at Tulo," Bettis said of Asche's hit. "I turned around and looked and I was like, 'Oh, man!' But there's nothing you can do about that. That's baseball."
Colorado center fielder Charlie Blackmon made a sliding catch to rob Freddy Galvis of a hit after Revere's grounder went through Tulowitzki's legs leading off the bottom of the seventh. But Asche hit a sharp grounder that would have been a routine play for Tulowitzki except the two-time Gold Glove winner was shifted to the right-field side of second base.
"I align the defense," Rockies manager Walt Weiss said. "I felt we stole some outs with the shift. We're playing the percentages."
The 26-year-old Bettis allowed two hits and tied a career-high with seven strikeouts in eight innings in his 12th start in the majors.
Tulowitzki had two homers in 154 at-bats this season before going deep his first two times up against Cole Hamels (5-4). Ben Paulsen hit a two-run homer for the Rockies, who won for the fifth time in six games.
"I haven't started off the way I envisioned, but today is why I play," said Tulowitzki, who finished 4 for 4.
Hamels had won his last four starts. The Phillies have lost five straight.
"He can definitely carry a team," Hamels said of Tulowitzki. "He showed why he's a great hitter."
Tulowitzki drove an 0-1 pitch deep into the seats in left for a 1-0 lead in the first. He connected on a 1-2 pitch in the third, sending another drive into the seats in left. Tulowitzki had just two hits in 14 previous at-bats against Hamels.
Bettis took a shutout into the ninth in an 11-2 victory over San Francisco in his previous start last Sunday. The right-hander is 3-5 with a 5.77 ERA in 41 career appearances.
"He was coming off his best outing and he topped it," Weiss said.
The Phillies scored a run off closer John Axford in the ninth when left fielder Brandon Barnes made an error on Chase Utley's deep fly to the wall, allowing Revere to score from second after he reached on a wild pitch while striking out.
Asche made his debut in left field after learning the position the past two weeks at Triple-A Lehigh Valley. He made the switch from third base after prospect Maikel Franco was called up. Asche made one putout on a liner right at him.
Rockies: Prospect David Dahl had surgery to repair his spleen after a collision in the outfield during a game Thursday for Double-A New Britain.
Rockies: LHP Jorge De La Rosa (1-2, 6.51) makes his first start since being scratched Tuesday because of a cut middle finger. De La Rosa is 2-4 with a 5.34 ERA against Philadelphia.
Phillies: RHP Aaron Harang (4-4, 1.93) tries to continue his dominance at home. He has a 0.61 ERA in Philadelphia this season. Harang is 6-6 in 15 career starts vs. Colorado.