The blast occurred near Vavuniya, the last government-held garrison town before rebel-controlled territory in the north, said Lt. Col. Upali Rajapakse, a senior officer at the defense ministry's information center.
Six of the dead were civilians and one was a soldier going home on leave, Rajapakse said.
He blamed the Liberation Tiger of Tamil Eelam — the Tamil Tigers' formal name — for the attack. However, the rebels denied any involvement, calling the bombing a plot to discredit them.
"This is part of a series of bombings in the northeast carried out by the military intelligence," rebel spokesman Rasiah Ilanthirayan told The Associated Press by telephone. "Their motive is to tarnish the image of the LTTE in the international forum."
The bomb was hidden in a tree and went off as the bus drove past, said Ranjith Siriwardena, a local police officer. However, he said did not know how it had been detonated.
He said seven of the wounded passengers were soldiers, also going on leave.
Murky killings in which both sides blame the other, or on militia allegedly allied with the military, have increased in recent months.
On Friday, the human rights watchdog group Amnesty International said both the military and the rebels were deliberately targeting civilians and urged the country to let in international rights monitors.
The attack was the second on a civilian bus in a week, after a bomb on a bus killed 16 people in the eastern town of Ampara on Monday.
Violence between government forces and the rebels — who are fighting for an independent homeland for ethnic minority Tamils in the island's north and east — has increased dramatically in recent weeks as the government pushes to retake rebel-held territory in the east.
The rebels have struck back with bombings, their first-ever air raid on a government air force base and several attacks at sea.
The rebels have fought the government since 1983, seeking independence from the ethnic Sinhalese-dominated country after decades of discrimination against Tamils.
The civil war killed at least 65,000 people before a Norwegian-brokered cease-fire was signed in 2002.
The truce temporarily halted the fighting, but more than 4,000 people have died since late 2005, when violence flared again.
However, both sides still claim to be abiding by the truce.