Syrian government troops have retaken parts of the strategic town of Saraqeb in the last rebel-held province, Idlib. Syrian army units besieged the town for two days, exchanging artillery fire with Turkish forces who were supporting Syrian rebels.
It follows weeks of aerial bombardment by the Syrian air force and their Russian backers, combined with a ground offensive.
The advance has forced hundreds of thousands of civilians to flee.
Saraqeb straddles the intersection of the major M4 and M5 motorways that link government-held cities including Damascus and Aleppo, but run through rebel-controlled territory.
Television footage shows troops and armoured vehicles in the devastated town, with corpses lying in the streets.
State media say army units have started clearing the town of mines. Another strategic town, Maarat al-Numan, fell to the government last week.
Since December, Syrian soldiers, supported by Iran-backed militia and Russian air strikes, have captured dozens of towns and villages in the country’s north-west, which is the last stronghold of the opposition to Syrian President Bashar al-Assad.
More than half a million civilians, the vast majority women and children, have fled their homes since the government launched its offensive, with many having to flee multiple times over the last few years.
Now they are being forced into smaller and smaller areas, but the fighting and bombing still follow them, the UN says.
It estimates that a further 280,000 people are in imminent danger of displacement as the fighting approaches them.
The UN’s human rights office (OHCHR) says those battling for control of Idlib show little concern for the protection of civilians.
“It is shocking that civilians continue to bear the brunt of hostilities between all parties to the conflict. It appears foreign powers are battling for territorial and political gains, while blatantly disregarding their obligation to protect civilians.”
The OHCHR says 186 civilians were killed in January, and 49, among them 14 women and 17 children, in the first five days of February alone.
Attacks on civilians, or civilian infrastructure, are likely to be war crimes if deliberate, it added.
The Turkish government, which backs the Syrian opposition and fears a massive influx of refugees, has called on Russia to bring an end to the advance.
The Turkish military has deployed troops to Idlib to monitor a 2017 de-escalation agreement brokered by Turkey and Russia that has been repeatedly violated.
The agreement was designed to avert a Syrian government assault that the UN said could create the worst humanitarian catastrophe of the 21st Century.
Turkey is already hosting 3.6 million Syrian refugees and says it would not be able to handle a fresh influx of displaced people.