宁采臣(张国荣饰)是一名年轻的书生,他被派往郭北县执行一项任务。途中遭遇了大雨,不得已躲进了一个传说中充满谜团的寺庙,名为兰若寺,希望能够在那里暂避风雨。然而,宁采臣的到来却受到了寺庙内的道士燕赤霞(午马饰)的阻拦,使他无法入住。于是,宁采臣决定夜晚偷偷进入寺庙,寻找庇护。
在夜幕降临时,宁采臣被一阵美妙的琴音所吸引,他在那里与聂小倩(王祖贤饰)相遇。然而,宁采臣并不了解,聂小倩实际上是一名女鬼,被困于人世。她的出现使得宁采臣陷入了生死交错的危险中,但幸运的是,燕赤霞及时赶到,救了他的性命。聂小倩渐渐对宁采臣产生了感情,但她的感情被燕赤霞所阻挡。
宁采臣误以为燕赤霞是凶手,计划与聂小倩一同逃走。然而,事情并没有那么简单,这个故事远比看上去复杂。树妖姥姥(刘兆铭饰)要求聂小倩杀害宁采臣,但聂小倩始终不肯。于是,姥姥命令众多妖怪前来追杀宁采臣和聂小倩。幸运的是,燕赤霞及时出现,保护了这对恋人,最终与树妖姥姥展开了一场激烈的战斗,并成功将姥姥封印一百年。
随着剧情的发展,宁采臣渐渐了解到聂小倩的真实身份,她是一名幽魂,曾因尸骨被抛弃在荒野而受到姥姥的控制,每夜需要吸取年轻壮男的阳气以延续自己的生命。为了保护聂小倩免受更多的伤害,宁采臣答应将她的尸骨送回乡间,完成她的安葬仪式,让她得以投胎再世。然而,事情变得更加错综复杂,聂小倩再次受到地府老妖的控制,被迫成为他的妻子。