我遇到了麻烦,不知道如何解决这个问题。
我有一个网站www.example.com
。它是在移动浏览器上打开的,我必须在一个操作触发重定向后重定向到something://
。
无论我多努力,我都无法重定向到something://
,当我这样做时:
<?php header('Location: something://'); ?>
我得到的是:http://www.example.com/something://
。
我一直在尝试使用JS(location.replace.href,location.replace等),但也没有运气。
如何强制网址改变我想要的方式?
答案 0 :(得分:2)
RFC 2616说:
位置=&#34;位置&#34; &#34;:&#34;绝对URI
RFC 2396中指定了absoluteURI
。
absoluteURI = scheme ":" ( hier_part | opaque_part )
relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
hier_part = ( net_path | abs_path ) [ "?" query ]
opaque_part = uric_no_slash *uric
uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
"&" | "=" | "+" | "$" | ","
net_path = "//" authority [ abs_path ]
abs_path = "/" path_segments
authority = server | reg_name
reg_name = 1*( unreserved | escaped | "$" | "," |
";" | ":" | "@" | "&" | "=" | "+" )
server = [ [ userinfo "@" ] hostport ]
userinfo = *( unreserved | escaped |
";" | ":" | "&" | "=" | "+" | "$" | "," )
hostport = host [ ":" port ]
host = hostname | IPv4address
hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
IPv4address = 1*digit "." 1*digit "." 1*digit "." 1*digit
port = *digit
由此,如果您使用something://
协议,则需要指定authority
部分 - 斜杠不能是字符串的最后部分,例如something://example
但是,关于重定向位置的最终调用始终与客户端的浏览器有关,出于安全原因,该浏览器可能拒绝重定向到非HTTP(S)URL。
答案 1 :(得分:1)
如果您正在寻找JavaScript解决方案,请尝试以下操作:
window.location = 'customprotocol://';
window.location.assign('customprotocol://');
但如果您的应用(即没有与customprotocol://
相关联的内容)未安装,则最有可能看不到任何内容。该问题的常见解决方案是使用setTimeout
提供回退机制,因此如果没有与customprotocol://
相关联的任何内容,只需在指定的时间后将用户重定向到任何可用的页面。
window.location = 'customprotocol://';
window.setTimeout(function() { window.location = 'http://example.com/fallback.html' }, 1);
答案 2 :(得分:0)
尝试@vitozev显示的JS方法, 或者:
echo <<< EOF
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=something://">
EOF;
或:
header('HTTP/1.1 301 Moved Permanently');
header('Location: something://');
header ('Content-Length: 0');