东路西军和地主民团自广武出发,水陆并进,直扑灵州城和横城。灵州民军在高登云的率领下,一面加固城防,积极做好防守准备,一面向陕北三边民军求援。12月下旬,西军和民团向灵州城发起猛攻。由于灵州城池坚固,民军作战英勇,西军伤亡惨重,只好暂时撤退到距城1.5公里的树林中,再作打算。
此后,西军采取昼伏夜出的战术,每夜派兵小攻大喊,虚张声势,暗中却加紧赶造云梯、护头木板、爬城铁爪等攻城器具。同时派兵日夜不停地挖掘直通城东南角的地道,企图炸毁城墙,攻占灵州城。西军一切准备就绪后,便在一天晚上向灵州城发起总攻。在密集的炮火掩护下,西军架设云梯和用铁爪爬城。民军在高登云的指挥下,击退了一批又一批的攻城西军,敌我双方都付出了沉重的代价。正当战局紧张之时,城东南角被西军炸开了一个缺口,西军立即向缺口涌来。在这紧急关头,守城民军奋力拼杀,终于击溃西军,迅速堵住缺口。战斗持续到天亮,西军再次败退。攻城屡遭挫败的西军,便改变策略,假意提出要与民军议和。他们物色了几个与高登云、马连第有旧交的绅士为代表,进城与民军进行谈判;他们还找了马连第的妻哥当说客,要求民军撤出灵州城,转移到别处去。民军副统帅马连第见西军和地主民团势力强大,也主张议和,并极力劝说高登云答应清军的条件。此时,宁夏府城民军已撤退北走,驻守横城的高士秀也率所部民军东去陕北三边,灵州已成为一座孤城,在“内无粮草,外无救兵”的形势下,高登云答应与西军和谈,撤出灵州城。在和谈时,高登云向西军提出了几个要求:民军撤出灵州城时,西军与民团不打不追,不设埋伏;西军与民团进城后,不得杀人抢掠等,西军首领一一“允诺”。
高登云率领民军撤出灵州城,北走横城,然后沿着明长城撤往陕北,投靠陕西定边民军首领郑思诚,并希望与已在陕北的高士秀所部民军会合。可惜,郑思诚虽为陕西起义民军首领之一,但此人心胸狭窄,心术不正。高登云投靠后,他假装很高兴,并“热情款待”灵州起义民军,暗中却阴谋吃掉这支民军。他在定边以东15公里处的砖井子设下埋伏,将灵州数百民军杀死杀伤。高登云也左臂负伤,后隐居于盐池、定边一带,默默而终。
高登云率领民军撤出灵州城的次日,西军与地主民团进驻灵州,他们并没有遵守与高登云达成的协议,而是按照陕甘总督长庚的指示,“敞刀三日”,大开杀戒。一进城,张绍先之子与知州余重基先联合贴出了一张布告,要求百姓各安其业。然后又制作了许多小白旗分发给城内豪绅官宦之家,悬于各家门首。第二天天一亮,西军沿街呐喊,让人们守在家中不得外出,同时关闭城门,大批西军和民团分头出动,凡没有悬挂白旗的人家,挨门逐户搜杀,无一幸免。不但对参加起义的平民百姓格杀勿论,就是没参加起义的人,凡问话对答不上者或稍觉行为可疑者也是一个不留。余重基说府相后街百姓烧了他的二堂,于是西军和民团又从后街杀起,直杀到东街两侧,从黎明直杀到掌灯时分,东街、后街血流满地,惨不忍睹。有些百姓一看没有生路,便悬梁自尽;有些妇女为免遭奸污,投井自杀。如此一连搜杀3日,百姓磕头求饶,哀哭震天,家财被洗劫一空。高登云的妻子因故未走,被西军搜出斩首示众,高妻临刑时大骂清军,不屈而死。马连第首鼠两端,民军撤退时留家未走,他自以为保护余重基有功,又是力劝高登云撤离灵州之人,西军定能和善相待。然而西军一进城,余重基首先拿他开刀,不但杀了他,而且杀了他全家。“敞刀三日”后,灵州城内尸首遍地,人烟断绝,腥臭气味,数十日不散,整个灵州城陷入一片血泊之中。
西军和民团的野蛮兽行发泄完了以后,又强迫城外百姓用牛车把尸体拉往城北雁虎墩附近挖坑掩埋,人称“万人坑”。据事后统计,灵州城被杀民众约有3000人(一说5000人以上)。