如何配置Express路由以实现无.html后缀的简洁站点URL路径
Express 配置无后缀HTML访问路径方案
你可以通过以下两种常用方式实现需求,可根据自己的站点规模选择:
方案1:静态文件扩展配置(适合全静态站点,无需额外写路由)
直接修改你现有的express.static配置项,添加extensions参数即可:
// 需放在所有路由定义的最前面 app.use(express.static(__dirname + '/public', { // 自动匹配.html后缀的静态文件 extensions: ['html'] })) // 你的根路径路由可以保留 app.get('/', function(req, res) { res.sendFile(path.join(__dirname, '/public/index.html')) })
配置完成后,访问/home时Express会自动查找public/home.html文件返回,无需额外定义单个路由。
方案2:显式定义路由映射(适合需要自定义路径逻辑的场景)
如果你需要对特定路径做权限校验、数据注入等额外逻辑,可以单独为每个路径定义路由:
app.use(express.static(__dirname + '/public')) app.get('/', function(req, res) { res.sendFile(path.join(__dirname, 'public', 'index.html')) }) // 新增自定义路径路由 app.get('/home', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'home.html')) }) app.get('/profile', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'profile.html')) })
注意:path.join推荐传入多段路径参数,避免不同操作系统路径分隔符不兼容的问题
可选优化:禁止带.html后缀访问
如果需要避免用户同时访问到带后缀和不带后缀的路径,可以添加重定向中间件,将带.html的请求永久跳转到无后缀路径:
// 放在所有路由最前面 app.use((req, res, next) => { if (req.path.endsWith('.html')) { // 去掉.html后缀跳转 res.redirect(301, req.path.slice(0, -5)) return } next() }) // 后面再放static配置和其他路由
内容的提问来源于stack exchange,提问作者Hrittik Chatterjee
相关产品推荐
相关产品推荐

