如何配置网站使根域名直接访问子文件夹内index.html且URL不变
问题场景
托管静态站点时需要将/src/index.html设为根路径默认入口:访问https://example.com时直接返回该文件内容,浏览器地址栏保持根域名,无需追加/src/index.html后缀路径。
当前站点文件结构:
此前尝试的两种配置均存在缺陷:
- 写入重写规则
RewriteRule ^ src/index.html:正则匹配范围过大,会将style.css等所有静态资源请求全部重写到src/index.html,导致页面样式、脚本等资源加载失败 - 写入301跳转规则
Redirect 301 /index.html /src/index.html:属于外部永久跳转,会触发浏览器地址栏变更为example.com/src/index.html,不符合URL保持根域名的要求
正确.htaccess配置
将以下内容写入站点根目录的.htaccess文件即可实现需求:
<IfModule mod_rewrite.c> RewriteEngine On # 仅匹配根路径空请求,内部转发到入口文件,不改变地址栏 RewriteRule ^$ /src/index.html [L] </IfModule>
配置逻辑说明
- 正则表达式
^$仅会匹配请求路径完全为空的场景,也就是直接访问根域名的请求,不会命中静态资源、子页面等其他路径的请求,不会干扰正常资源加载 - 规则末尾的
[L](Last)标记表示命中当前规则后立即终止重写流程,避免和其他重写规则产生冲突 - 该规则属于服务器端内部转发,不会向浏览器返回3xx跳转响应,因此浏览器地址栏会始终显示根域名,不会暴露
/src/路径
排查注意点
- 提前确认托管主机已开启Apache的
mod_rewrite模块,绝大多数共享托管主机默认开启该模块,无需额外配置 - 如果此前测试过301跳转规则,请先清除浏览器缓存,301为永久跳转,浏览器会在本地缓存跳转规则较长时间,不清除缓存会持续跳转到带
/src/index.html的地址 - HTML中引用静态资源时建议使用根路径开头的绝对路径(例如
/src/style.css),避免相对路径解析错误
内容的提问来源于stack exchange,提问作者Dirk Freijters
相关产品推荐
相关产品推荐

