如何根据接收的变量重定向回数据提交的原来源页面?
实现提交后返回来源页的方案
核心逻辑是提交时携带来源页地址给newposts处理页,处理完成后基于该地址执行重定向,以下是两种可落地的实现方式:
方式1:表单隐藏域传参(最稳定,推荐)
无需依赖浏览器特性,兼容性最好
- 前端表单改造
在两个输入页的提交表单内新增隐藏字段,存储当前页面的URL,示例代码如下:
如果是服务端渲染的页面,也可以直接在渲染时给<form action="/newposts" method="post"> <!-- 原有表单的其他输入项 --> <input type="hidden" name="source_url" id="source_url" value=""> <button type="submit">提交</button> </form> <script> // 动态赋值当前页面地址为隐藏字段的值 document.getElementById('source_url').value = window.location.href; </script>value填入当前页的固定路径,无需JS赋值。 newposts处理页逻辑
处理完业务逻辑(比如内容写入数据库)后,读取前端传递的source_url参数,执行重定向即可:- PHP示例:
header('Location: ' . $_POST['source_url']);exit; - Node.js Express示例:
res.redirect(req.body.source_url) - 前端JS处理场景:
window.location.href = 读取到的source_url值
- PHP示例:
方式2:读取HTTP Referer头(无需改前端代码)
浏览器发起表单提交请求时,会自动在请求头中携带Referer字段(注意标准拼写缺一个字母r),值就是发起请求的来源页地址,你可以直接在newposts处理页读取该字段做重定向。
该方案局限性如下:
- 部分用户的浏览器隐私设置会禁用Referer字段传递,会导致重定向失效
- 站点如果存在HTTPS跳HTTP的场景,Referer字段也会被浏览器自动拦截
- 建议仅作为补充兜底方案,优先用方式1实现
安全优化建议
无论用哪种方式获取跳转地址,都建议增加域名校验逻辑:判断跳转地址是否属于你自己的站点域名下,不符合的话统一跳转到站点首页,避免被利用跳转到外部恶意站点。
内容的提问来源于stack exchange,提问作者Jr.Macking
相关产品推荐
相关产品推荐

