1917年,中国西南边陲的刘家村。刘金喜(甄子丹 饰)和妻子阿玉(汤唯 饰)共同抚养两个儿子方正和晓天,日子平淡且幸福。直到某一天,两个不速之客打破了刘家村的平静,也摧毁着金喜一家的生活。这二人企图洗劫村中的钱柜,被刚好在此的金喜撞见,一阵混乱打斗,二匪稀里糊涂被金喜打死。由于其中一人是政府通缉的要犯,因此县官大喜过望,村里人也将金喜奉为大英雄。但是,这看似普普通通的盲打误杀却引起一个人的怀疑,他名叫徐百九(金城武 饰),是县衙的捕快。从蛛丝马迹上来看,二匪系死于武功高强人之手,徐百九由此留在村里,对金喜展开了连番的观察、调查与试探。
明朝成化年间,朝纲腐败,奸邪当道。西厂东厂为宦官把持,混淆黑白,陷害忠良,朝野内外噤若寒蝉。时有赵怀安(李连杰 饰)等流亡剑客挺身而出,接连铲除东厂数名奸佞,致令阉贼胆战心惊。适值此时,风头正劲的西厂督主雨化田(陈坤 饰)出面干预。另一方面,宫女素慧容(范晓萱 饰)怀有身孕,绝命奔逃。被雨化田的爪牙追捕途中幸得神秘侠客凌雁秋(周迅 饰)相救。二人一路辗转逃往关外,来到曾经引起过腥风血雨的龙门客栈落脚。龙门客栈一如往昔,为凶险异常之所在。雨化田手下追赶至此,与先前而至的鞑靼商队剑拔弩张,关键时刻更有与雨化田长相极其相似的卜仓舟(陈坤 饰)与女侠客顾少棠(李宇春 饰)投宿客栈。不久,赵怀安一众也偷偷潜至龙门。
乾隆中期,大清河发大水,胜芳县令李满仓趁机贪污腐败,致使灾情愈加严重。为查看民情,乾隆皇帝带公主及贴身侍卫,微服巡游散州(今霸州)境内号称“胜水荷芳”的胜芳。不料,这一消息被反清复明组织天地会和痛恨清政府剿灭政策的东夷倭寇截获。一场惊天的刺杀阴谋拉开了序幕……