后秦姚兴大规模发动军队,派姚平、狄伯支等人率领步骑四万人,征伐北魏,命太子姚泓镇守长安,姚钦镇守洛阳,自己则亲自带领大部队,紧跟他们而来。姚平等对北魏乾壁城发动猛攻,经过六十多天的激战,终于攻克。
拓跋珪反应很快,立即派遣拓跋顺、长孙肥带领六万骑兵做先锋,自己统领大部队出发,前来迎击后秦军队。
拓跋珪的军队抵达永安后,姚平派遣骁勇的将士率领精壮的骑兵二百人前去侦察北魏军的虚实动静,长孙肥迎击他们,把他们全部抓获,姚平带领部队撤退而走,拓跋珪一路追击,在柴壁城追上了,姚平只得环城顽强据守,北魏大军把他们团团围住。
姚兴带领着四万七千人前去救援姚平,准备占据汾水以西的天渡,从这里运送粮食接济坚守柴壁的姚平部队。
北魏博士李先说:“兵法云:驻扎在高的地方,就要被敌人围困;驻扎在地势低洼的地方,就要被敌人囚禁。现在秦军同时犯了这两项错误,我们应该赶在姚兴没有抵达之前,派遣一支出其不意的突击部队,抢先占据天渡,那样的话,柴壁城不用打仗就可以拿下来了。”
拓跋珪下令增加修筑一重又一重的围墙,对内预防姚平的向外突围,对外用来抵抗姚兴的向内攻击。
广平将军安同说:“汾水的东面是蒙坑,东西绵延三百多里,没有道路可以与它连通。姚兴如果来,只能从汾水的西岸直接逼近柴壁,倘若这样,敌军的声势互相接应,那么,我们设下的围障再坚固,也不能制服他们。所以,依我看,不如在汾水之上搭起浮桥,把大部队渡到汾水西岸,在那里筑起围墙,用来抵抗敌人的进攻,这样,敌军即使来到这样,也已经没有他们施展智慧和力量的地方了。”拓跋珪听从了他的主张。
而姚兴抵达蒲钣后,由于害怕魏军的强大,拖延了很久才很谨慎地将部队向前缓慢推进,北魏军队得以顺利修筑好浮桥和工事。
双方在蒙坑之南大战,拓跋珪斩杀后秦军一千多人,姚兴撤退了四十多里,姚平也不敢冲出柴壁接应。拓跋珪于是把部队分派到四处去据守险峻重要的关卡,使后秦军队无法接近柴壁。
姚兴把主力驻扎在汾水以西的地区,凭借着山谷建起营寨壁垒,又把柏树等木材捆扎在一起,从汾水上游投放到河中顺流而下,打算用这些来摧毁北魏军队搭建在汾水上的浮桥,但北魏军队用钩子把这些木材全部捞上岸来,当做取暖煮饭用的劈柴了。
双方僵持到十月的时候,姚平驻守的柴壁粮草吃完,箭矢用尽,夜里,姚平率领所有军队从西南向外突围,姚兴也在汾水西岸列开阵势,燃起烽火,擂动战鼓,高声呼喊着想策应姚平的军队。
姚兴想让姚平拼死力战突围出来,而姚平则盼望着姚兴能向北魏的包围圈发动进攻,接应他们出来,因此,双方只是呼喊交相应和,却谁都不敢逼近北魏的重围。姚平突围不成功,无计可施,跳下汾水自杀。
很多将领都跟着姚平跳水求死,拓跋珪派会游泳的人把他们一一抓捕,被捕的有狄伯支、唐小方等四十多人,其余留下来的二万多部众,也都束手就擒。
姚兴坐在汾水西岸,眼睁睁地看着他们走投无路,却没有力量救援他们,因此全军不禁失声恸哭,哭声震撼山谷。后秦军队极其畏惧北魏军队,姚兴几次派遣使节去向北魏国请求讲和,拓跋珪坚决不许,还乘胜对蒲钣发动了进攻,姚绪只是坚守,并不出战。
此时北方的柔然可汗听说拓跋珪出兵征讨后秦,便从参合陂出发突然骚扰魏国北方,拓跋珪听说之后,只得带领部队撤退。柴壁之战对姚兴是一次重大的打击,此战之后,后秦再也无力与北魏抗争。
拓跋珪因为要专心对付来侵扰的柔然部落,决定和后秦和好,便把俘虏来的后秦将领唐小方归还给后秦,姚兴也归还了扣押的贺狄干,并决定送给北魏一千匹好马,用来赎回狄伯支,拓跋珪同意了。
贺狄干长期被扣押在长安,因为经常被幽禁,所以有时间熟读了儒家经典和历史书籍,到后来,一举一动都变成与读书人一样了。等他回到了北魏之后,拓跋珪见他言谈语调衣着服饰全部与后秦人一样,认为他是仰慕后秦而有意摹仿,非常生气,把他和他的弟弟贺狄归一起杀掉了。
当年,十五岁的拓跋珪和叔叔拓跋窟咄交战时,高邑公莫题认为拓跋珪年纪小,不可依靠,便暗地里与拓跋窟咄联络,赠箭盟誓说:“三岁大的小牛犊子,怎么能拉得动重载的车呢!”拓跋珪一直怀恨在心。有人告发莫题平时待人接物高傲无礼,好像在模仿君主的样子,拓跋珪便派人拿着那支箭给莫题看,并告诉他说:“三岁的牛犊子结果怎么样?”莫题父子相对而哭,第二天,便被抓起来杀了。
拓跋珪曾赏赐给北魏开国功臣庾岳房地,庾岳带领家僮整治这块地,有人秘密报告庾岳衣服鲜艳亮丽,行为举止仿照君主,拓跋珪马上下令将庾岳处死,当时的人都为庾岳感到冤屈惋惜。这都是因为拓跋珪长期服食寒食散,所以性情越来越猜忌多疑,群臣人人自危。