перенаправление URL — перенаправить страницу на URL без протокола?

Я в беде и не знаю, как решить эту проблему.

У меня есть сайт www.example.com, Он открывается в мобильных браузерах, и мне нужно перенаправить something:// после одного действия вызывает перенаправление.

Как бы я ни старался, я никогда не смогу перенаправить something://, когда я делаю:

<?php header('Location: something://'); ?> что я получаю это: http://www.example.com/something://,

Я пытался с JS (location.replace.href, location.replace и т. Д.), Но также не повезло.

Как заставить URL изменить то, что я ТОЧНО хочу?

4

Решение

RFC 2616 говорит:

Location = «Location» «:» absoluteURI

где absoluteURI указан в RFC 2396.

  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 по соображениям безопасности.

2

Другие решения

Если вы ищете решение 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);
1

Попробуйте метод JS, показанный @vitozev,
или же:

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');
0
По вопросам рекламы [email protected]