Theo Scott completed 22 of 28 passes for 221 yards while LaVon Brazill had a career-high 10 catches for 99 yards for the Bobcats (7-3, 5-1 Mid-American Conference), who won their fifth straight conference road game.
Weller's game-winning kick was his second of the night from long range. His 46-yarder gave the Bobcats a 24-14 lead with 10:22 left in the third quarter.
Naaman Roosevelt had eight catches for 165 yards and scored three touchdowns for Buffalo (3-7, 1-5). He became the school's all-time receiving yards leader with 3,551.
The teams combined to score 28 points in a 3:19 span in the first half. Tyler Tettleton ran 9 yards for Ohio's first score and Buffalo answered when Roosevelt caught a 76-yard pass from Jerry Davis.
Davis started in place of Zach Maynard, who sat out the first quarter for violation of team policies.
Vince Davidson scored on a 10-yard run for Ohio, and LaVon Brazill and Terrence McCray worked a reverse option for 48 yards.
Maynard hit Roosevelt for a 21-yard TD with 3 seconds left in the half, and for a 22-yarder in the third quarter. A.J. Principe?s 26-yard field goal tied the score at 24.
Maynard finished 17 of 36 for 230 yards and two touchdowns. He drove the Bulls to the Ohio 33 on their last possession. His third-and-10 pass deflected off Marcus Rivers? hands and into the arms of Ohio?s Shannon Ballard with 21 seconds left.
Buffalo rolled up 441 yards of total offense while Ohio had 384.