So the AT-AT attacking the Rebel defense lines wasn't a head-on attack?
Correct. You have to remember that the Rebels weren't attempting to win the battle, they knew they couldn't. Instead, their ground forces and some combat pilots fought a delaying action which really never had a chance anyway.
The whole point of going head-to-head with an enemy is to defeat them on the field of battle, to break their army. The Empire was certainly trying to do that in ESB, but the Rebels were not. Instead of going head-to-head with the Imps, in which they knew they would lose, they chose to flee instead.
Incidently, while the Battle of Hoth was not head-to-head, the Battles of Yavin and Endor were.