Nginx配置:避免根URL自动追加/index并保留.html移除规则
Nginx 移除HTML后缀同时保留根URL为/的配置方案
你当前的rewrite规则会匹配所有.html结尾的URL,包括根目录下的/index.html。当访问/时,Nginx的index指令会自动内部定位到index.html,此时触发rewrite规则,将/index.html重写为/index,导致地址栏显示/index。
要解决这个问题,只需要调整rewrite规则,让它跳过对/index.html的匹配,同时保留其他页面的.html后缀移除功能,具体配置如下:
修改后的完整配置
server { # 保留你原有的其他配置 # 移除.html后缀(排除根目录的index.html) location ~ ^/(?!index\.html$)(.*)\.html$ { rewrite ^/(.*)\.html$ /$1 permanent; } # Web根目录与文件处理 location / { root /var/lib/jenkins/workspace/test; index index.html index.htm; try_files $uri $uri.html $uri/ /index.html; } }
配置说明
- 正则中的
(?!index\.html$)是负向前瞻断言,表示只有当URL不是以/index.html结尾时,才会触发这条rewrite规则,这样访问根URL/时,内部加载的index.html不会被重写,地址栏保持为/。 - 原有
location /中的try_files配置依然生效:访问/test时,会依次尝试查找test文件、test.html文件、test目录,最后 fallback 到index.html,完美配合rewrite实现无后缀访问。 - 用户直接访问
/test.html这类URL时,会被301重定向到/test,实现后缀移除的需求。
内容的提问来源于stack exchange,提问作者ByoungJu Kim
相关产品推荐
相关产品推荐

