至德二年(757年)二月,肃宗从彭原(今甘肃宁县)进至凤翔(长安西300余里),向长安逼近了一大步,并召集诸道兵马,谋取收复长安。长安人听说肃宗到达凤翔后,纷纷从城中逃出归顺唐军。
当时,协助肃宗指挥全局的李泌主张先派安西及西域兵进军东北,从归州(今河北怀来)、檀州(今北京密云)南攻范阳,先夺取叛军老巢,让叛军首尾不能相顾,疲于奔命,这样,唐军便能以逸待劳。肃宗求胜心切,说:“现在大军已集,江淮庸调也到,应以强兵直捣叛军腹心。如果派兵至东北数千里,先攻取范阳,则是舍近求远。”李泌说:“如果现在以所有的兵力收复两京,虽能攻下,然而叛军一定会东山再起,我军又将陷于危急境地。现在我们的精兵主要是西北边镇和西域诸胡的军队,性耐寒而畏暑,如果利用其士气,进攻叛军疲劳之师,一定能够攻克。而现在两京已到春天,叛军收其残兵,逃归范阳老巢,关东暑热,官军忍受不了,一定要回西北。这时叛军休兵秣马,将会卷土重来。那样就会征战不休。不如先用西北之兵攻取叛军巢穴,其退路已断,然后再彻底消灭之。”但肃宗急于收复长安、洛阳两京,没有耐心等待,没有听从李泌的建议。
不过,还没有等到肃宗正式开始收复两京的调度,便先经历了一场惊吓。当时,唐军关内节度使王思礼驻扎在武功,兵马使郭英乂驻扎在武功东原,王难得驻扎在西原。二月十九日,叛军大将安守忠突然率军进攻武功,郭英乂军迎战,不料唐军大败,郭英乂本人也中了一箭,狼狈而逃。而王难得见死不救,自己率军撤退。王思礼孤掌难鸣,便率军退到扶风一带。叛军骑兵一度赶至大和关(今陕西岐山南),距离凤翔只有50里,肃宗大惊,下令凤翔戒严。
幸好叛军只是虚晃一枪。实际上,此时叛军内部矛盾重重。自从安禄山占据洛阳后,大肆享乐,他原本就极为肥胖,以至患上了目疾,双目几乎失明。又生有疽疮,经常疼痛难忍。他本来就很暴躁的性情,变得格外残暴,遇事稍不称心,轻则呵斥、谩骂,重则鞭挞,甚至杀人,弄得身边的亲信人人自危。安禄山身边的宦官李猪儿挨打最多,由此心生怨恨。而安禄山称帝以后,深居禁中,大将难得见其一面,一切大事都由严庄(怂恿安禄山起兵之人)传达。即使是如严庄这样的心腹重臣,也经常被安禄山鞭打。安禄山平日宠爱小妾段氏,段氏见安禄山如此状况,料来命不长久,便想为自己打算,让亲生儿子安庆恩取代安庆绪的“太子”地位。安禄山也颇为此意,因此造成安庆绪的自危,使父子矛盾激化。严庄为了自己的利益,乘机唆使安庆绪和安禄山的贴身宦官李猪儿杀安禄山以求自保,于是严庄与安庆绪深夜持兵立于房外,李猪儿持刀入房,猛砍睡梦中的安禄山的大肚子。一连几刀,血流如注,连肠子也流了出来。安禄山从睡梦中惊醒,连忙去摸枕旁的护身佩刀,佩刀却早已经被李猪儿藏了起来。安禄山摇动帐竿说:“一定是家贼杀了我。”最终因失血过多痛苦地死去。
安禄山死透后,安庆绪、严庄才进入房内,用毡毯包裹好尸体,埋在床下。严庄对外宣称说安禄山得了急病,立晋王安庆绪为太子。于是庆绪即帝位,尊安禄山为太上皇。安庆绪昏庸懦弱,言辞无序,严庄生怕众人不服,便不让安庆绪见人。安庆绪也日夜纵酒为乐,称严庄为兄,事无大小,皆取决于严庄。
安庆绪杀父自立后,任命史思明为范阳节度使,兼领恒阳(今河北正定)军事,封妫川王。然而,当初安禄山攻陷两京后,将大量掠夺来的财帛珍货都运往老巢范阳,所以安禄山一死,这些财物都落入史思明之手,他不满安庆绪弒父自立,开始拥兵自重,不听安庆绪的命令。安庆绪的声望本来就不及其父,对此也无可奈何。
至德二年(757年)四月,迫不及待的肃宗任命郭子仪为司空、天下兵马副元帅,召其率军赴凤翔,预备发起总攻,一举攻克长安。叛军大将李归仁闻讯率领骑兵5000至三原(今陕西三原东北),郭子仪事先派部将仆固怀恩(铁勒部人)、王仲升、浑释之、李若幽在白渠留连桥埋伏,结果叛军中了埋伏,全军覆没,李归仁跳入白渠水中,才逃得一命。
郭子仪首战告捷后,随即与关内节度使王思礼合兵,向长安进军。叛军大将安守忠、李归仁率大军在京城西清渠抵挡唐军,双方相持7天,唐军无法前进一步。安守忠假装撤退,郭子仪立即下令全军追击。叛军派出9000骁勇骑兵,摆开一字长蛇阵,唐军上前进攻的时候,长蛇阵首尾突然变化为两翼,夹击唐军,唐军大败。唐判官韩液、监军孙知古都被叛军俘虏,军资器械丢弃殆尽。郭子仪不得不退军,并上书肃宗,请求自贬。
肃宗见唐军一败再败,认为叛军精锐难敌,一直忧心忡忡。郭子仪认为回纥骑兵精锐,可与叛军匹敌,便劝肃宗请回纥派援兵。肃宗与回纥怀仁可汗定约:“收复京师之日,土地和百姓归唐,金帛与子女尽归回纥。”这实际上是一种变相的饮鸠止渴,同时将灾难转嫁到普通百姓身上。
怀仁可汗欣然同意,立即派儿子叶护及将军帝德等率4000精锐骑兵来到凤翔,要助唐军一臂之力。肃宗十分高兴,盛情宴劳赏赐叶护,惟其所愿。回纥军的伙食也优厚于唐军,每天供应羊200只,牛20头,米40斛。肃宗之子广平王李俶(后改名李豫,即为后来的唐代宗)还与叶护对天盟誓,约为兄弟,叶护大喜过望,主动称呼李俶为兄长。
至德二年(757年)八月二十三日,肃宗犒赏三军,准备发起总攻长安、收复京师的战斗。郭子仪依然任天下兵马副元帅(广平王李俶挂名天下兵马元帅),负责总指挥。肃宗对郭子仪说:“事情成败,在此一举。”郭子仪回答说:“如果这一战不能收复长安,臣当以死来相报。”
八月二十七日,御史大夫崔光远(即前面那位反复无常的京兆尹)首先出战,大败叛军于骆谷(今陕西周至西南)。随后,唐将光远行军司马王伯伦、判官李椿率2000人马进攻中渭桥(今陕西咸阳东北),杀叛军守桥兵1000余人,并乘胜攻至长安苑门,形势一度对唐军有利。当时驻扎在武功的叛军听说渭桥失守,担心腹背受敌,便急忙弃地而逃,奔回长安,刚好遇到唐军进攻长安苑门,于是与守城叛军内外夹击唐军,唐军溃败,唐主将王伯伦战死,另一主将李椿被叛军俘虏。
九月十二日,天下兵马元帅广平王李俶率领朔方诸道唐军及回纥、西域来援之军共15万,号称20万,从凤翔出发。回纥军到达扶风之时,郭子仪专门为叶护设宴,热情款待。出乎所有人的意料,叶护竟然慷慨说:“国家有难,我才率兵从大老远赶来相助,国难未消,何以食为!”宴会一结束,便立即率军出发。
九月二十七日,唐大军到达长安城西,在沣水之东的香积寺(位于今陕西长安南)以北摆开阵势,李嗣业为前军,郭子仪为中军,王思礼为后军,回纥兵马由叶护率领作为机动部队,唐军绵延横亘30里,要与叛军决一死战。叛军10万人在北部列阵,叛将骁将李归仁首先出阵挑战,唐军前队迎战,逼近叛军阵前,叛军突然开始大反扑,唐军阵势大乱,开始溃败。在最危急的时候,李嗣业说:“今日如果不以身饵敌,则官军非败不可。”于是卸下铠甲,光着膀子,抡起长刀,大声呼叫,冲向敌阵。李嗣业勇猛砍杀,所向披靡,共杀数十人,叛军一时惊骇,竟然被其英勇所震慑。唐军见主将身先士卒,士气大振,阵势得以稳定。
当时,叛军事先将精兵埋伏在东面,想袭击唐军的背部。唐军得知后,派朔方左厢兵马使仆固怀恩率回纥兵回击,回纥兵锐不可当,叛军望而生畏,死伤惨重,几乎全军覆没,叛军由此锐气大受挫折。李嗣业又与回纥兵从叛军阵后出击,与唐大军两面夹击,共杀死叛军6万余人,填于沟堑死者不计其数。这场血战一直从午时持续到酉时,直到夜幕降临,叛军大败之下,不得不收拾残兵退入长安城中。
这时候,仆固怀恩对广平王李俶说:“叛军肯定要逃离长安,请让我率两百骑兵追击,这样一定能俘获叛军大将安守忠、李归仁等人。”李俶却不同意,说:“将军战已疲劳,暂且休息,等明天再说。”仆固怀恩说:“李归仁、安守忠等都是叛军中的骁将,今天被我们骤然打败,这是天赐给我们的好机会,为何要纵之而逃呢!如果使其重整旗鼓,卷土重来,将是我们的大祸患,到那时后悔就迟了!兵贵神速,为何要等到明天!”广平王李俶却坚持不让追击,让仆固怀恩回去。仆固怀恩料到叛军必无守志,一定会弃城逃跑,又去向李俶请求,往而复返,一晚数次,但李俶始终没有同意。
果然如仆固怀恩所料,当天半夜,叛军大将李归仁、安守忠与张通儒、田乾真均弃城逃走。一直到第二天天亮,唐军才得知消息,然而追击已经来不及。九月二十八日,唐大军进入长安,长安由此收复。
李俶率军进入长安时,城内的百姓扶老携幼,夹道相迎。然而,他们并不知道,肃宗与回纥背后的交易差点让他们遭到灭顶之灾。长安收复后,回纥叶护便要履行前约,预备大掠长安,索掠城中的金帛、女子。广平王李俶见百姓正欢天喜地,喜悦难言,于心不忍,拜于叶护马前,劝说道:“现在刚刚收复西京(长安),如果大肆虏掠,则东京(洛阳)城中的人皆为叛军固守,就难以攻克了,愿收复东京后再如约。”叶护见李俶对自己下拜,非常吃惊,急忙跳下马答拜,跪下捧着李俶的脚说:“我立刻率兵为殿下收复东京。”随后与仆固怀恩率领回纥、西域兵由城南绕行,到浐水以东安营扎寨。
长安的百姓得知真相后,拜泣李俶说:“广平王真是华夷之主!”李俶由此赢得了巨大的声誉。后来肃宗听说此事,感慨地说:“我不及也!”
长安收复后,叛军军心动摇,叛军大将张通儒等逃出长安后东走,率残兵退守陕郡。李俶、郭子仪又率大军进攻洛阳。安庆绪集合全部精锐,以御史大夫严庄为指挥,与张通儒合兵,步骑共15万,抗拒唐军。
十月十五日,广平王李俶率大军至曲沃(今河南灵宝东)。回纥叶护派麾下将军鼻施吐拨裴罗率军依南山设伏,郭子仪等率军与叛军在新店(今河南陕县西)交战,叛军依山结阵,郭子仪初战不利,开始败退,叛军趁胜下山追击。事先埋伏在南山的回纥兵突然冲出,袭击叛军后方。叛军一直畏惧回纥兵,当时回纥兵尚未追及,于滚滚尘埃中先射出了十几支箭,叛军一见是回纥的箭矢,惊呼道:“回纥兵来了!”军无斗志,竟然由此而溃散。唐军趁机杀了个回马枪,与回纥兵两面夹击,叛军大败,死伤遍野。
安庆绪见大势已去,率领残兵仓皇逃往河北。在离开洛阳之前,安庆绪将俘获的唐将哥舒翰、程千里等30余人杀死。
十月十八日,广平王李俶率军入洛阳。至此,两京均已收复,平叛战争取得了重大胜利。洛阳百姓却再次遭受不尽的苦难,欢迎唐军的人群还没有散去,回纥兵已按捺不住,直冲向库府收取财帛,在洛阳市井及村坊之中大肆抢掠3日,且理直气壮,毫无顾忌。广平王李俶也无法阻止其剽掠行为。洛阳民众出于无奈,主动募集罗锦万匹献给回纥,回纥才停止抢劫。为了安抚回纥,肃宗任叶护为司空,封忠义王,并规定每年赠回纥绢2万匹,从朔方军领取。
十月二十三日,肃宗重回长安,城中百姓出国门奉迎,20里不绝,均舞跃呼万岁,喜不自胜。之后,肃宗大赦天下,只有与安禄山同反者及李林甫、王鉷、杨国忠子孙不在赦免之例。立广平王李俶为楚王,不久又被封为皇太子,加郭子仪司徒,李光弼司空,其余李嗣业、王思礼、仆固怀恩(铁勒部人)、鲁炅、张镐等有功之将各进阶赐爵,加食邑不等。死节之士李憕、卢奕、颜杲卿、袁履谦、许远、张巡、张介然、蒋清、庞坚等皆加赠,并封其子孙官。战亡之家,免两年赋役,郡县明年租、庸免三分之一。唯有肃宗最重要的谋臣李泌归隐衡山。
当时有不少大臣投降了叛军,如东京就有受叛军官者陈希烈、王维等300余人,这些人均被逮捕下狱治罪。肃宗还专门任命礼部尚书李岘、兵部侍郎吕湮为详理使,与御史大夫崔器共同审理陈希烈等人降叛军之罪。吕湮、崔器认为诸陷叛军官员皆背国从伪,按律都应该处死。肃宗也想如此,以杀一儆百。但李岘却说:“叛军攻陷两京,天子走保蜀中,人们各自逃生。这些陷贼官都是陛下亲戚或勋旧子孙,现在一概以叛逆罪处以死刑,恐有乖于仁恕之道。并且叛乱还没有最后平定,河北未下,群臣还有许多陷于叛军。如果从宽处置,是开其自新之路,如果全部诛杀,是坚其叛逆之心。《尚书》有言:歼厥渠魁,胁从罔理。吕湮、崔器只是死守律例,不识大体。希望陛下深加考虑。”
双方意见不一,争论了好几天。最后肃宗还是听从了李岘的建议,将陷贼官分六等定罪,重者刑之于市,次赐自尽,次重杖一百,次三等流、贬。达奚珣等18人被斩于城西南独柳树下,陈希烈等7人被赐自尽于大理寺,应受杖者皆杖于京兆府门。只有安禄山所任命的河南尹张万顷因为在叛军中保庇百姓而被免罪,大诗人王维则因为在洛阳时写诗表达他对唐廷的眷念之意也被免罪。
而那些死也不肯投降的名士则受到表彰。汲郡(今河南汲县)青岩山有个名叫甄济的隐士,因为操行高尚而名声在外。安禄山没有谋反之前,聘请甄济为采访使和掌书记。甄济感觉到安禄山有反叛之心,便假装中风,辞官回家。安禄山称帝后,念念不忘甄济,派心腹蔡希德带领两名刀斧手来召甄济,倘若甄济抗拒,便就地处死。结果甄济自己伸着脖子,等着刀斧手行刑。蔡希德颇为不忍,于是没有杀他,回去告诉安禄山说甄济患了重病。但即便如此,后来安庆绪即位后,也派人强行把甄济抬到洛阳。幸好一个多月后,广平王李俶就率军收复了洛阳。肃宗任命甄济为秘书郎,让他住在三司馆舍,令那些受叛军官爵的大臣对其列拜,以此来让那些人心中惭愧。
两京收复后,安史之乱进入另一个阶段,留守范阳的史思明逐渐替代安庆绪成为另一主角。安庆绪逃出洛阳后,惶惶不可终日,一路奔至邺郡(今河南安阳),才算安定下来。但其最得力的大将李归仁率领精兵曳落河及同罗、六州胡兵数万往范阳而去,沿途路过之处,大肆劫掠,人物无遗。留守范阳的史思明对此很是惊惧,先埋伏下精兵,再派人去招李归仁部,曳落河与六州胡兵都就此投降了史思明,只有同罗兵不肯听从,结果被史思明打败,财物被史思明夺走,剩余的同罗兵逃归其国,史思明一时实力大增。安庆绪畏惧史思明势力强大,派部将阿史那承庆和安守忠到范阳调遣史思明的军队。史思明心中不平,范阳节度判官耿仁智趁机对史思明说:“你现在位高势重,别人不敢进言,我愿冒死进一言。你为安氏父子尽死力而战,是迫于其凶威。现在唐王朝中兴,天子仁圣,你如果能率所部归顺朝廷,必转祸为福。”其裨将乌承玼也说:“现在唐朝复兴,安庆绪朝不保夕,你何必为其卖命而死!如果归顺朝廷,以赎前罪,易于反掌。”于是,史思明决意归顺唐朝。肃宗闻讯大喜,封史思明为归义王,继续担任范阳节度使,他的7个儿子都封了高官。
史思明投降唐朝后,河北郡县除安庆绪据相州外,其它州县都重新为唐所有。不过,史思明只是出于利益考虑,不愿受制于安庆绪,投降唐朝不过是权宜之计。半年后,史思明再次反叛,并与在邺城的安庆绪遥相呼应。唐大军包围邺城,安庆绪为了保命,不得不以出让皇位作为交换条件,向史思明求助。史思明利用唐军指挥不一的弱点,解了邺城之围,但叛军再一次发生内讧,史思明杀死安庆绪,留下儿子史朝义留守邺城,自己引兵北还,在范阳自称大燕皇帝,并且在半年以后重新攻陷洛阳。唐朝方面再度陷入被动局面。就在这个时候,叛军再度发生内讧,史朝义杀死其父史思明,代父自立。唐帝国此时已经是代宗执政,见叛军势力依然强大,便再次向回纥借兵。
宝应元年(762年)十月,唐与回纥联军开始进攻。史朝义与部下商议应对之策,部将阿史那承庆说:“如果只是唐军来,我们应该拼力与其战,如果与回纥兵一起来,则兵锋不可抵挡,应退守河阳以避其锋。”由此可见回纥兵的精锐确实在相当程度上震慑住了叛军,但史朝义没有听从。唐军到达洛阳北郊后,在横水列阵,叛军以数万人马应对,并立栅自守。唐将仆固怀恩在西原摆开阵势,派骁勇骑兵与回纥兵一道,从南山出栅东北,内外夹击,大败叛军。史朝义听说后,亲自率10万精兵来掠阵。叛军阵势严整,唐军几次冲杀,均巍然不动。唐将镇西节度使马璘说:“事情危急。”竟然单枪匹马地冲入敌阵,夺得叛军两面盾牌,左右突击。叛军阵势开始松动,唐军趁机进攻,叛军大败,之后一蹶不振,一败再败。史朝义北逃至范阳,遭到守军拒绝,走投无路,自缢而死。长达7年零三个月的安史之乱终于平息。
可叹的是,唐军收复洛阳后,回纥兵在城内大肆烧杀劫掠,死者多达数万人,大火几十日不熄。而唐军方面的朔方、神策军也认为东京、郑州、汴州、汝州都是叛军所据之地,也大肆虏掠,3个月才停。这些州县均被荡尽,士民不得不以纸为衣。
安史之乱无疑是唐朝历史中最重大的事件,它也被认为是唐王朝由盛到衰的转折点——一个本来富饶、稳定和辽阔的集权帝国,经过安史之乱后,演变成一个斗争不休、不安全和分裂的国家。安史之乱甚至被认为是整个中国历史的一个大转折点,它不但对社会和经济造成了巨大的破坏,而且充当了强烈的催化剂,产生了严重和深远的后果。在这场旷日持久的战争中,中原人民遭到了空前的浩劫,特别是北方经济受到很大破坏。“洛阳四面数百里州县,皆为丘墟”,出现了千里萧条、人烟断绝的惨景。尤其是肃宗、代宗为了早日平叛,均积极鼓励叛军自动投降,准许他们在原地任官,继续为唐朝效力,因此,最后唐朝廷平定叛乱实际是以妥协的方式来解决的。这种妥协的代价是高昂的,中央的力量被严重削弱了,方镇割据的局面初步形成。在节度使管辖的地区,唐朝廷既不能任免官吏、征收赋税,又不能调动军队。节度使的职位,或者父子相袭,或者部将相继。他们手握重兵,互相攻伐,对唐朝中央集权形成了严重的威胁。此后,唐帝国一直处在混乱多事和分裂割据的状态之中,皇室急剧衰微,再也没有振兴起来。在封建社会,皇室的命运与国家的命运密不可分,皇室的衰微就是国家的衰微。一个辉煌的时代终于结束了。