Crowd trouble again marred the Bristol derby despite stringent security measures as City secured only their second victory on Rovers' territory in 14 visits.
Trouble flared when City went into the lead, and two Rovers directors, Geoff Dunford and Barry Bradshaw, raced to the fans' enclosure behind the goal and appealed for calm.
Only a goal-line clearance by Tom White and a desperate lunge by player- manager Ian Holloway saved Rovers falling behind early on. Then, after 31 minutes, Rovers' supporters lost control as failure to defend a long goal-kick soon had their side in trouble. Stuart Naylor's kick was skimmed on by Shaun Goater's head 10 yards inside Rovers's half. Australian striker Paul Agostino shot around the advancing keeper, Andy Collett, to give City the lead.
The match was always in City's control after Peter Beadle had had a hotly disputed penalty saved by Stuart Naylor. The Bermudian, Shaun Goater, added a second, his 19th of the season, before substitute Julian Alsop replied for Rovers with nine minutes to go.
Alsop, 6ft 4in and signed from Halesowen two months ago for pounds 15,000, stretched to a Holloway corner and his downward header bounced up and over Naylor into the top of the net.
Goals: Agostino (31) 0-1; Goater (72) 0-2; Alsop (81) 1-2.
Bristol Rovers: Collett; Pritchard, Martin, Skinner (Hayfield, 76), White, Tillson, Holloway, Miller (Alsop, 76), Cureton, Power (Bennett, 60), Beadle.
Bristol City: Naylor; Owers, Barnard, Edwards (Paterson, 45), Taylor, Hewlett, Bent, Carey, Agostino, Goater (Nugent, 87) Brennan. Substitutes not used: Kuhl.
Referee: C Wilkes (Gloucester).
Bookings: Rovers: Skinner. City: Barnard, Edwards.
Man of the match: Bent.