Next.js中remotePatterns通配符为何对特定图片失效?
问题:Next.js Image通配符配置为何对特定域名路径失效?
我使用newsapi.org结合Next.js Image组件加载API返回的图片,在next.config.js中配置了允许所有域名的图片资源,大部分域名的图片都能正常加载,但遇到了特定图片的src属性无效错误,推测这和域名后.com/紧跟的点有关。我不需要解决办法(修改特定配置即可修复),只想搞懂为什么通配符规则对这个特定图片不起作用。
报错信息
Error: Invalid src prop (https://www.si.com/.image/ar_1.91%2Cc_fill%2Ccs_srgb%2Cfl_progressive%2Cg_faces:center%2Cq_auto:good%2Cw_1200/MTk2ODA2NjcwMTU0NzM2NzAy/dawn-staley.jpg) on `next/image`, hostname "www.si.com" is not configured under images in your `next.config.js` See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host
初始next.config.js配置
const nextConfig = { reactStrictMode: true, images: { remotePatterns: [ { protocol: "https", hostname: "**", } ], }, };
尝试与验证
我尝试给pathname添加通配符(如/**),但问题依然存在。而单独添加以下配置后,图片就能正常加载:
{ protocol: "https", hostname: "www.si.com", port: "", pathname: "/.image/**", }
原因分析
- glob匹配逻辑局限性:Next.js的
remotePatterns中,hostname: "**"的通配符匹配并非完全覆盖所有场景。当目标URL的路径以/.开头时,系统的路径匹配逻辑可能出现异常,导致通配符规则未被正确触发,反而误判主机未配置。 - 错误提示不准确:实际问题可能出在路径匹配上,但报错信息错误指向了hostname未配置。默认情况下
remotePatterns的pathname为/**,理论上应匹配任意路径,但/.image/这类特殊格式的路径可能绕过了通配符匹配。 - 匹配优先级问题:明确的主机+路径配置优先级高于通配符规则,当通配符规则无法匹配特殊路径格式时,需要显式配置才能生效。
内容的提问来源于stack exchange,提问作者DumDeeDum
相关产品推荐
相关产品推荐

