ECS集群(EC2)中如何通过Docker实现内部URL末尾追加斜杠重定向
实现URL末尾自动加斜杠重定向的方案
你可以根据技术栈选择以下任意一种方案实现需求:
方案1:在Node前端应用层配置(无需修改AWS资源,最推荐)
你当前的容器内直接运行Node前端服务,根据你使用的Web框架对应配置即可:
- 如果是Express框架:
可以直接安装express-slash中间件,在服务启动代码中加入如下配置:
不想引入额外依赖也可以手动写原生中间件实现:const slash = require('express-slash'); app.enable('strict routing'); app.use(slash());app.use((req, res, next) => { // 排除带后缀的静态资源请求,仅对页面路径生效 if (req.path.substr(-1) !== '/' && req.path.indexOf('.') === -1) { res.redirect(301, req.path + '/' + req.url.slice(req.path.length)); } else { next(); } }); - 如果是用
serve包托管React/Vue等打包后的静态站点:
直接在启动命令中添加--trailing-slash参数即可,修改package.json里的start脚本:"scripts": { "start": "serve -s build --trailing-slash -l 4444" }
配置完成后重新构建Docker镜像,推送到ECR后更新ECS任务定义即可生效。
方案2:在AWS ALB负载均衡层配置(无需修改应用代码)
直接在ECS绑定的应用负载均衡器中添加全局重定向规则:
- 进入AWS EC2控制台,找到当前使用的负载均衡器,进入「监听器」标签页
- 选择HTTPS:443的监听器,点击「管理规则」->「添加规则」
- 配置匹配条件:选择
路径->匹配正则表达式,填入规则^([^.]*[^/])$(排除静态资源路径) - 配置动作:选择
重定向至,端口保持443,状态码选择301永久重定向,路径填入#{path}/,查询字符串保持原有的#{query} - 保存规则,将该规则的优先级设置为高于默认转发规则即可生效。
注意:该方案会对所有匹配的路径生效,如果你有部分后端接口不需要加尾斜杠,可以调整正则匹配规则排除对应路径前缀。
效果验证
配置生效后,访问https://us.springverify.com/api-integrations,会自动301重定向到https://us.springverify.com/api-integrations/即为配置成功。
内容的提问来源于stack exchange,提问作者Harry Kris
相关产品推荐
相关产品推荐

