You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX 301移除URL中.html后缀时排除/static路径的配置方法

同location块下排除/static路径的.html重定向实现方案

Nginx 单个location块内的if规则不存在“前置匹配即跳过后续逻辑”的执行顺序,空if块不会产生任何实际作用,不需要单独为/static路径写前置判断块,直接把例外逻辑整合到原有重定向的正则匹配规则里即可,完全符合你不能拆分独立location的环境限制。

直接把你原来的重定向配置替换为以下代码:

if ($request_uri ~ ^/(?!.*?/static/)(.*)\.html$) {
    return 301 /$1$is_args$args;
}

规则细节

  • 正则中的(?!.*?/static/)是PCRE原生支持的负向零宽断言,会自动排除所有路径中包含/static/片段的请求,这类请求不会触发301重定向
  • 如果你仅需要排除根目录下的/static/路径(即只有/static/xxx.html这类以/static开头的请求需要例外,不需要处理路径中间嵌套/static的场景),可以将正则简化为^/(?!static/)(.*)\.html$,匹配效率更高
  • 规则保留了原配置里的$is_args$args参数拼接逻辑,原URL携带的查询参数不会在跳转后丢失

之前尝试的方案失效原因

  • 无任何执行指令的空if块不会对Nginx的请求处理流程产生任何影响,自然无法拦截后续的重定向规则
  • Nginx的if指令存在大量已知的执行逻辑坑(社区常说的"If is Evil"),不要尝试通过前置if块return、设置临时变量的方式模拟“跳过后续规则”的效果,很容易出现不可预期的匹配错误
  • 你之前测试的return $host$request_uri写法会拼接出带域名的非标准路径,不符合Nginx return跳转的路径格式要求,无法正常生效

内容的提问来源于stack exchange,提问作者Stefan R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:31:11