Перенаправление страницы не происходит при нажатии на ссылку <a>. X-Frame-Options установлен на 'DENY'
На определенной странице моего сайта, например, example.com/redirect.php, я написал тег привязки. <a href="http://news.ycombinator.com/item?id=5311151">path</a>
,
При нажатии на эту ссылку страница не загружается. При проверке элемента я получил эту ошибку:
Отказался отображать " https://news.ycombinator.com/item?id=5311151 " во фрейме, потому что он установлен
"X-Frame-Options" для "DENY"
После поиска в Google я обнаружил, что это именно такое поведение, так как владелец другого сайта не хочет отображать его содержимое в iframe за пределами своего домена.
Я пробовал это, но все они загружаются в iframe.
- window.location.href = " https://news.ycombinator.com/item?id=5311151 ";
<?php header(location: https://news.ycombinator.com/item?id=5311151"); ?>
- window.location.replace (" https://news.ycombinator.com/item?id=5311151 ");
У меня есть два вопроса:
- Почему при щелчке ссылки пути новая страница загружается в iframe на той же странице (redirect.php), а не перенаправляется на страницу ycombinator.
- Как я могу заставить пользователя перенаправлять на любую страницу за пределами моего сайта.
PS Я использую ламповый стек.
Обновление: как предложил Сергей Середенко в комментариях, я попытался с top.location.href = "..."; Это сработало для меня, и я могу перенаправить страницу.
Другая проблема: мне нужен URL реферера. После выполнения перенаправления с использованием метода Сержа Середенко я не получаю фактический URL-адрес реферера для $_SESSION['HTTP_REFERER'], вместо этого я получаю внутренний URL-адрес. Мне нужен реальный URL реферера.
Я попытался перенаправить URL-адрес на стороне сервера, используя: <?php header(location: https://news.ycombinator.com/item?id=5311151"); ?>
,
но я получаю эту ошибку: "X-Frame-Options" для "SAMEORIGIN".
Как я могу сделать перенаправление на стороне сервера и сохранить реальный URL реферера?
Заранее большое спасибо:)
1 ответ
Обычно, когда вы получаете эту ошибку X-Frame-Options, браузер ожидает получить "частичную" HTML-страницу. Не полная HTML-страница с тегами и т. Д.
Это означает, что когда браузер выполняет запрос к серверу. Например, если оба экрана находятся в "режиме перехода" (Source and destination for example in same page but in different tab like this situation)
, Мы получаем ту же ошибку.
1) Помните, что header() должна вызываться перед отправкой любого фактического вывода, либо обычными тегами HTML, пустыми строками в файле, либо из PHP. Это очень распространенная ошибка при чтении кода с включенными или требующимися функциями или другой функцией доступа к файлу, с пробелами или пустыми строками, которые выводятся до вызова header(). Та же проблема существует при использовании одного файла PHP/HTML. http://php.net/manual/en/function.header.php
2) Попробуйте это:
<?php
//...some your code
print '<script type="text/javascript"> location.replace("https://google.com/"); </script>';
//...
?>