崇祯元年惊蛰,沂州红花埠的桑生独居,与东邻书生打趣表示不怕鬼狐。当夜,自称西家歌妓的莲香夜访,二人共度良宵。三日后,李通判之女也前来,称倾慕桑生。此后二女轮流到访,莲香带西域葡萄酒,李女以井水代茶。
桑生渐渐神思恍惚,莲香算出他患鬼症,需七日晨露调朱砂。清明夜,李女现身,称莲香在南山修炼采补术,还自曝是前朝长平公主,被温体仁之子所害,尸埋在桑生窗下,指责莲香吸桑生阳气修炼内丹。桑生试探莲香,莲香发狂化作九尾白狐攻击,桑生昏死,幸得李女搭救。
为阻止莲香吸尽红花埠童男童女,桑生和李女潜入南山,在祭坛与走火入魔的莲香对峙。李女为救桑生和众人,扑向祭坛压住阵眼,莲香惨叫化为原形,李女魂魄被吸入玉匣。
三年后桑生进京,崇祯帝自缢那日,匣中李女声音让他打开匣子,李女称已位列仙班。桑生惊醒,发现自己在桃花树下,邻生笑他做春梦,他发现袖中半块虎符与胸前玉佩严丝合缝,远处城隍庙钟声似在诉说前尘。