一个做五金生意的朋友第一次建网站,买了个虚拟主机,把首页保存成index.html传到根目录,域名解析好之后打开一看——404。 他以为是文件没传成功,又传了一遍,还是404。折腾了半小时,最后发现虚拟主机默认装的是Windows Server + IIS,IIS的默认首页文件名优先找的是default.htm和default.html,index.html排到第三位。而他那个根目录下恰好有个系统自带的default.html占着位置,所以服务器压根不会去加载他的index.html。
这个坑踩的人远比想象的多。"网站首页文件名叫什么"这个问题看起来简单,答案也确实是index.html,但背后的服务器机制、优先级规则、跨平台差异和历史遗留问题,随便踩中一个都能让你白传半天文件。 如果你是第一次建网站,或者刚换了服务器环境,搞清楚下面这几件事,能少走很多弯路。
三大服务器默认首页文件名及优先级(从上到下依次查找)
| 1 | Apache(Linux虚拟主机最常见):index.html → index.htm → index.php → index.php4 → index.php5 |
| 2 | Nginx(高性能Web服务器):index.html → index.htm → index.php(需显式配置index指令) |
| 3 | IIS(Windows服务器):default.htm → default.html → default.asp → index.htm → index.html → index.asp |
一、为什么index.html是事实标准,但IIS偏偏不按这个来
index.html成为网站首页的"默认文件名",是Apache服务器的功劳。 1995年Apache发布时,就把index.html设定为当用户访问一个目录时自动查找的默认文件。因为Apache在很长一段时间里占据了Web服务器市场60%以上的份额,index.html就成了事实上的行业惯例。后来出现的Nginx也沿用了这个规则,默认配置里index指令排第一的就是index.html。
但微软的IIS走了一条不同的路。IIS诞生于Windows NT时代,微软内部习惯用"default"作为默认文件名(Windows系统里的默认配置文件名就叫default.ini、default.cfg这类),所以IIS把default.htm和default.html排在了index前面。而且IIS的默认列表里,default.asp和default.aspx的优先级也比index.html高——因为在那个年代,IIS的主要搭档是ASP和ASP.NET,一个网站大概率是动态页面而不是静态HTML。
一句话记住:Linux主机(Apache/Nginx)→ 首页叫 index.html;Windows主机(IIS)→ 首页叫 default.html 更稳,或者把根目录下多余的default文件删掉,让你的index.html成为唯一选项。
二、index.html和index.htm到底有什么不同,写哪个才是对的
这可能是Web开发史上最让人困惑的"双胞胎"问题。两个后缀没有任何功能区别——浏览器对.htm和.html的解析方式完全相同,服务器也把两者都当作HTML文档处理。.htm存在的唯一原因,是DOS时代的8.3文件名限制。
在Windows 95之前的DOS系统中,文件名不能超过8个字符,扩展名不能超过3个字符。"index.html"有4个字符的扩展名,在纯DOS环境下无法识别。所以当时很多开发者把扩展名从.html缩短为.htm,以便在DOS环境下编辑和管理网页文件。Windows 95引入了VFAT长文件名支持后,这个限制消失了,但.htm后缀作为历史遗产保留了下来。
今天建网站,统一用.html,不要用.htm。 理由有三:第一,.html是完整拼写,HyperText Markup Language的缩写就是HTML,用三个字母.htm看起来像是拼写错误;第二,现代编辑器、IDE和版本控制工具对.html的语法高亮和文件类型识别更准确;第三,如果你的服务器同时有index.html和index.htm两个文件,服务器会按优先级加载其中一个,你可能改了半天发现改的不是正在被加载的那个文件,这种情况在实际运维中非常容易出问题。
一个容易出事的场景:你在本地用VS Code编辑index.html,改好了传到服务器,刷新没变化。检查了十几分钟才发现服务器上还有一个index.htm,优先级比你的index.html高,浏览器一直加载的是index.htm。两个文件同时存在是很多新手排查半天找不到原因的元凶。
三、Linux vs Windows服务器,默认首页文件名对照
国内虚拟主机市场有一个很分裂的现象:阿里云、腾讯云这些主流云厂商的虚拟主机,Linux系统的默认首页是index.html,Windows系统的是default.html。 很多用户买虚拟主机的时候根本没注意操作系统是什么,建站工具或者CMS自动生成的首页文件名可能和服务器预期的不一样,导致部署完打不开。
| 服务器环境 | Web服务器 | 默认首页优先级(从高到低) | 推荐命名 |
|---|---|---|---|
| Linux虚拟主机 | Apache | index.html → index.htm → index.php | index.html |
| Linux云服务器 | Nginx | index.html → index.htm → index.php | index.html |
| Windows虚拟主机 | IIS | default.htm → default.html → default.asp → index.htm → index.html | default.html(或删掉default用index.html) |
| 宝塔面板(Linux) | Nginx/Apache | index.html → index.htm → index.php | index.html |
| 宝塔面板(Windows) | IIS | default.htm → default.html → index.htm → index.html | index.html(在面板里把index调到第一位) |
如果你用的是宝塔面板,不管是Linux还是Windows版本,都可以在"网站设置→默认文档"里手动调整优先级顺序,把index.html拖到最上面就行。这比在服务器配置文件里改要简单得多,也不需要记住IIS的默认顺序。
四、除了index.html,动态网站首页还有这些命名方式
上面说的index.html和default.html主要针对纯静态网站(HTML+CSS+JS,没有后端)。但现实中大量网站是动态的——用WordPress、织梦、帝国CMS、ThinkPHP这些建站系统搭的,首页文件名就不是.html结尾了。
PHP类:index.php
WordPress、Laravel、ThinkPHP等PHP框架和CMS的首页统一用index.php。这是PHP生态的事实标准,配合URL重写可以实现"伪静态"(看起来像.html但实际是.php处理)。
ASP.NET类:default.aspx
Windows服务器上跑ASP.NET应用,首页通常叫default.aspx或index.aspx。IIS对.aspx的默认优先级很高,排在default.aspx→index.aspx。
Java类:index.jsp
Tomcat、Jetty等Java Web容器的默认首页是index.jsp或index.html。需要在web.xml中配置welcome-file-list来指定。
Node.js类:无固定文件名
Node.js应用通过路由控制首页,没有"首页文件"这个概念。Express框架通常在app.js或server.js中定义路由,/路径对应哪个视图由代码决定。
一个需要注意的细节:如果根目录下同时存在index.html和index.php,服务器优先加载index.html。 这在WordPress建站中是个常见坑——有人把旧网站的index.html留在根目录没删,装了WordPress之后访问首页一直显示旧的静态页面,怎么也看不到WordPress的界面。排查方法很简单:看根目录有没有index.html,有就删掉或者改名,让index.php成为优先级最高的文件。
混用静态和动态首页时的排查口诀:根目录下,静态文件(.html)优先级高于动态文件(.php/.aspx)→ 如果首页显示的不是你预期的内容,先看有没有更高优先级的文件挡在前面 → 删掉或改名多余的默认文件即可解决。
五、文件名大小写问题,Linux上Index.html和index.html是两个文件
Windows用户最容易在这个问题上翻车。Windows文件系统不区分大小写——Index.html、INDEX.HTML和index.html在Windows上被视为同一个文件。 但Linux严格区分大小写,这三个名字在Linux上就是三个不同的文件。
实际场景中常见的翻车姿势:在Windows电脑上建站,首页存成了Index.html(首字母大写),本地测试一切正常。传到Linux服务器之后,访问域名出现404或者显示Apache默认页面。因为服务器在找index.html(全小写),而你的文件叫Index.html,Linux不认为这是同一个文件。这个问题排查起来很痛苦,因为很多人在Windows上看文件名看不出大小写的区别。
铁律:网站所有文件名和目录名一律用小写字母,包括首页的index.html、CSS的style.css、图片的logo.png。不仅是为了避免Linux大小写敏感的问题,也是SEO的最佳实践——搜索引擎会把/About-Us.html和/about-us.html当成两个不同的URL,导致权重分散。
六、如果首页传上去了但还是404,逐项排查这5个地方
首页404是最让新手崩溃的问题,因为它看起来什么都没错——文件传了,域名解析了,但就是打不开。90%的404问题出在下面这5个地方,按顺序排查基本都能解决。
1. 文件传对目录了吗?
首页文件必须放在网站根目录下。虚拟主机的根目录通常是wwwroot、htdocs、public_html或web。FTP登录后看到的第一个目录不一定是根目录,找到带这几个名字的文件夹,把index.html传进去。
2. 有更高优先级的文件挡着吗?
IIS环境检查有没有default.html/default.htm/default.asp,Apache/Nginx环境检查有没有index.htm/index.php排在前面。把多余的默认文件删掉或者改名。
3. 文件名大小写对吗?
Linux服务器上,Index.html≠index.html。确认文件名是全小写,扩展名也是全小写(.html不是.HTML)。同时检查一下文件扩展名有没有被Windows隐藏导致实际叫index.html.txt。
4. 服务器默认文档配置对吗?
登录虚拟主机控制面板或宝塔面板,找到"默认首页"或"默认文档"设置,确认index.html在列表中。如果不在,手动添加并调到最高优先级。
5. 文件权限对吗?
Linux服务器上,index.html的权限至少要是644(所有者可读写,其他人只读)。如果权限是600或000,服务器读取不了,会返回403或404。
还有一个容易被忽略的情况:浏览器缓存。 你在服务器上改了首页文件,传上去之后刷新没变化,可能是浏览器缓存了旧版本。用Ctrl+F5强制刷新,或者在地址栏后面加个随机参数(比如?t=123),就能绕过缓存看到最新版本。
七、在建站系统里创建首页,文件名通常不用你操心
如果你用的是WordPress、织梦CMS、帝国CMS这些建站系统,首页文件名是系统自动生成的,不需要手动命名。 WordPress的首页由index.php + 主题模板文件(如front-page.php或home.php)共同决定,你在后台编辑的"首页"内容存的是数据库,不是文件。这类CMS在建站系统安装时就已经自动生成了index.php作为入口,用户不需要关心文件名问题。
但如果你是自己手写HTML/CSS建站,或者用建站工具导出静态页面,首页文件名就需要手动处理。用UC建站系统生成的HTML页面,系统会自动把首页命名为index.html并放在根目录,同时配合独立部署的服务器环境自动适配Apache/Nginx/IIS的默认首页规则,不需要用户去手动判断服务器类型和调整优先级。对于需要多站管理的场景,统一用index.html作为首页文件名还能减少跨服务器迁移时的配置修改——不管站点部署到哪台服务器上,首页入口都是同一个名字。
一条实用的命名习惯:不管你的服务器现在是什么环境,一律把首页命名为index.html(全小写)。如果服务器是IIS且根目录有default.html挡着,删掉default.html或者在控制面板里把index.html调到第一位。这个习惯能让你以后换服务器、迁移网站、或者交给别人维护的时候,不用解释"为什么这个站的首页叫default.html"。
最后说几句。网站首页文件名这件事,本质上是一个历史遗留问题——DOS时代的8.3文件名限制导致了.htm和.html并存,Apache和IIS的不同出身导致了index和default的分歧,Linux和Windows文件系统的差异又加上了大小写敏感这个变量。三层历史原因叠在一起,让一个本来应该很简单的问题变得需要专门写一篇文章来讲清楚。
实操层面记住三个关键点就够了:第一,统一用index.html,全小写;第二,根目录不要同时保留多个默认首页文件,多余的删掉或改名;第三,传到服务器打不开时,按"目录对不对→有没有更高优先级的文件挡着→大小写对不对→默认文档配置→文件权限"这个顺序排查,十有八九能解决。 剩下的就是积累经验,踩过一次坑之后,下次自然就记住了。


