重定向到另一个 URL 时如何传递 URL 参数?
Posted
技术标签:
【中文标题】重定向到另一个 URL 时如何传递 URL 参数?【英文标题】:How to pass URL parameters when redirecting to another URL? 【发布时间】:2015-10-14 17:44:35 【问题描述】:当页面 (www.dasinfobuch.de/links/Wizz) 被调用时,我正在使用此 html 代码重定向到另一个 URL:
<head>
<meta http-equiv="refresh" content="0; URL=http://52.28.104.181:8080/Wizard/Wizz">
</head>
但是,当我使用 URL 参数时,例如
www.dasinfobuch.de/links/Wizz?template=test
参数未传递到重定向页面。有没有办法做到这一点(最好是纯 HTML)? (我是 Web 编程新手。)
【问题讨论】:
在纯 HTML 中不可能,但在服务器端使用 30 倍重定向会更好(使用服务器端编程语言或 .htaccess 文件中的 ApacheRedirect
,如 @987654321 所示@)
@Pekka웃 好的,我会调查的,谢谢!但这必须在托管 www.dasinfobuch.de 的服务器上完成,对吗?我认为我在该服务器上没有这种访问权限(servlet 在不同的服务器上运行)。
是的,必须在该服务器上完成。如果您只能访问页面源代码,那么您唯一的选择是使用不太可靠的 javascript(JS 可能会被停用或根本无法解析,例如被搜索引擎爬虫之类的机器人解析)。
您还可以解析接收服务器上的HTTP_REFERER
标头(52.28....之一)。这也不是 100% 可靠的,因为客户可以将其关闭,但相对无痛
referer 与 JavaScript 无关,而是another HTTP header field。它是链接到目标的资源的地址。看看里面request.getHeader("referer")
。
【参考方案1】:
仅使用模仿non-standard Refresh
HTTP header field 的元元素是不可能的。当然还有其他方法。
如果你有类似预处理器的东西,你可以将请求传递给 HTML,如下所示:
<meta http-equiv="refresh"
content="0; URL=http://52.28.104.181:8080/Wizard/Wizz?template=<%
out.print(request.getParameter("template")) %>">
另一种(客户端)方式是使用 JavaScript 重定向:
document.location.href = 'http://52.28.104.181:8080/Wizard/Wizz' + document.location.search;
请注意,这将传递整个查询字符串,而不仅仅是 template
参数及其参数。如果这是一个问题,很容易从location.search
中只获取所需的字符串。
【讨论】:
谢谢,我会调查的...正如我所说,我是网络编程的新手,所以可能需要一段时间 :-) (好的,第一个想法应该很容易测试...) @lukas.coenig:别担心,慢慢来。这绝对是一个可以通过多种方法解决的问题。如果它仍然不起作用,提供一个实际的(servlet)代码示例可能对所有人都有帮助。 第一件事没有奏效。显然我没有可用的预处理器......结果只是:52.28.104.181:8080/Wizard/…( 如果它是一个 servlet,这可能意味着您使用 JavaServer Pages,这意味着您的 HTML 代码可能会被处理,这允许您将来自请求的数据(如查询字符串)包含在其他静态文件中HTML 内容,使用分隔符,如<%…%>
。如上所述,您需要提供更多信息,例如www.dasinfobuch.de/links/Wizz
的页面是如何生成和交付的……
我正在使用 servlet,但没有 JSP - 到目前为止,在目标服务器站点(运行 Tomcat8)上。 www.dasinfobuch.de/links/Wizz 页面是静态的,我可以放任何我想要的东西,而且我只需要它一次(或“有限”次 :-)),但服务器只是一个标准网络托管服务器(由德国 1und1 提供),它不是很灵活。到目前为止,我已经在 Tomcat 上完成了所有的编程,没有在客户端或其他服务器上完成。以上是关于重定向到另一个 URL 时如何传递 URL 参数?的主要内容,如果未能解决你的问题,请参考以下文章
如果发生重定向,如何在 file_get_contents 之后获取真实的 URL?