Nginx仅能识别index.html无法访问其他html文件应如何配置
Nginx配置任意.html文件访问的解决方案
问题根因
现有配置触发404的核心原因是:没有配置匹配所有.html后缀请求的处理规则,非/login路径下的.html请求没有命中你写的两个location块,会走Nginx默认的站点根目录查找文件,不存在就返回404。
修正后的完整配置
server { listen 8085; server_name localhost; # 显式声明全局默认索引文件,避免规则不统一 index index.html index.htm; # 专属匹配所有.html/.htm后缀的请求 location ~* \.html?$ { # 此处root改为你所有html文件存放的根目录 root html/login; try_files $uri =404; } location /login { root html/login; try_files $uri $uri.html $uri/index.html =404; } # 静态资源匹配规则 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root html/login; expires 30d; } }
关键修改说明
- 新增
.html后缀专属匹配规则:正则匹配优先级高于普通前缀location块,所有以.html/.htm结尾的请求都会进入该规则处理,直接到指定root目录下查找对应文件 - 显式声明全局
index指令:统一所有路径的默认索引文件解析规则,避免Nginx读取内置默认配置导致的异常 - 所有
try_files末尾添加=404:避免规则冲突触发内部异常重定向,找不到文件直接返回标准404 - 如果注册、忘记密码等其他页面存放在单独目录,参照
/login的location块对应修改root路径即可
生效验证步骤
- 执行
nginx -t检查配置语法是否正确,返回success再进行下一步 - 执行
nginx -s reload重载Nginx配置 - 直接访问
http://localhost:8085/test.html验证是否可以正常加载
内容的提问来源于stack exchange,提问作者Nishar sheik
相关产品推荐
相关产品推荐

