Можно ли перенаправить пользователя на другую страницу с помощью PHP?
Скажем, пользователь переходит к нему, www.example.com/page.php
и я хочу перенаправить его www.example.com/index.php
, как бы я сделал это без использования метаобновления? Является ли это возможным?
Это может даже защитить мои страницы от посторонних пользователей.
protection from unauthorized users
перенаправления; это не так, как надо делать;)Ответы:
Резюме существующих ответов плюс мои собственные два цента:
1. Основной ответ
Вы можете использовать
header()
функцию для отправки нового HTTP-заголовка, но его необходимо отправить в браузер перед любым HTML или текстом (например, перед<!DOCTYPE ...>
объявлением).2. Важные детали
умереть () или выйти ()
Почему вы должны использовать
die()
илиexit()
: The Daily WTFАбсолютный или относительный URL
С июня 2014 года можно использовать как абсолютные, так и относительные URL. См. RFC 7231, который заменил старый RFC 2616 , где допускались только абсолютные URL.
Коды состояния
Заголовок PHP "Location" все еще использует код HTTP 302- direct, но это не тот, который вы должны использовать. Вы должны рассмотреть либо 301 (постоянное перенаправление) или 303 (другое).
Примечание: W3C упоминает, что заголовок 303 несовместим со «многими пользовательскими агентами до HTTP / 1.1. В настоящее время все используемые браузеры являются пользовательскими агентами HTTP / 1.1. Это не так для многих других пользовательских агентов, таких как пауки и роботы.
3. Документация
Заголовки HTTP и
header()
функция в PHP4. Альтернативы
Вы можете использовать альтернативный метод, для
http_redirect($url);
которого требуется установить пакет PECL pecl .5. Вспомогательные функции
Эта функция не включает код состояния 303:
Это более гибко:
6. Обходной путь
Как уже упоминалось,
header()
перенаправления работают только до того, как что-либо записано. Обычно они терпят неудачу, если вызываются в середине HTML- вывода. Тогда вы можете использовать обходной путь HTML-заголовка (не очень профессиональный!), Например:Или даже редирект JavaScript.
источник
header('Location: '.$newURL);
должно быть до того, как какой-либо HTML (или текст) будет передан в браузер, иначе он не будет работать правильно.http-equiv="Location"
Не поддерживается всеми браузерами. Вы должны использоватьrefresh
вместо этого!<meta http-equiv="refresh" content="0;url=http://example.com/">
Используйте
header()
функцию для отправки заголовка HTTPLocation
:Вопреки тому, что некоторые думают, не
die()
имеет ничего общего с перенаправлением. Используйте его, только если вы хотите перенаправить вместо обычного выполнения.Файл example.php :
Результат трех казней:
Возобновление - обязательно
die()
/exit()
это некая городская легенда, которая не имеет ничего общего с реальным PHP. Это не имеет никакого отношения к клиенту, "уважающему"Location:
заголовок. Отправка заголовка не останавливает выполнение PHP независимо от используемого клиента.источник
exit()
запрещает странице показывать остальное содержимое (например, страницы с ограниченным доступом). vartec прав, он не имеет ничего общего с заголовком HTTP Location и вам не нуженexit
. Я решил включить его в свой ответ, потому что для тех, кто не знает, как сделать простое перенаправление, можно с осторожностью играть в безопасности, а не реализовывать простой, но важный шаг, чтобы он мог воспользоваться преимуществами продвинутого процесса. контроль..htaccess
для перенаправления, но мне нужен способ каким-то образом передать, какой домен перенаправлен в окончательный домен?Не забудьте умереть () / выход ()!
источник
Вывод JavaScript из PHP с помощью echo, который сделает эту работу.
Вы не можете сделать это в PHP, если вы не буферизируете вывод страницы, а затем не проверяете состояние перенаправления. Это может быть слишком много хлопот. Помните, что заголовки - это первое, что отправляется со страницы. Большая часть перенаправления обычно требуется позже на странице. Для этого вы должны буферизовать весь вывод страницы и позже проверить состояние перенаправления. В этот момент вы можете либо перенаправить страницу заголовка пользователя (), либо просто отобразить буферизованный вывод.
Подробнее о буферизации (преимущества)
Что такое выходная буферизация?
источник
Cannot modify header information - headers already sent by
ошибкой.но если вы используете функцию заголовка, то иногда вы получите «предупреждение, как заголовок уже отправлен» для разрешения, которое не выводится или не выводится перед отправкой заголовков или вы можете просто использовать
die()
илиexit()
после функции заголовка.здесь вы не столкнетесь ни с какой проблемой
источник
Большинство из этих ответов забывают очень важный шаг!
Выход из этой жизненно важной второй линии может привести к тому, что вы попадете на The Daily WTF . Проблема заключается в том, что браузеры не должны учитывать заголовки, которые возвращает ваша страница, поэтому при игнорировании заголовков остальная часть страницы будет выполняться без перенаправления.
источник
die();
вы дали - если вы этого не сделаете, пользователь может на мгновение увидеть всю страницу, если вы ее используете; пользователь будет перенаправлен, и никакой временный сбой контента не покажет + 1Использование:
Или, если вы уже открыли теги PHP, используйте это:
Вы также можете перенаправить на внешние страницы, например:
Убедитесь, что вы включаете
exit()
или включаетеdie()
.источник
Вы можете использовать переменные сеанса для управления доступом к страницам и авторизации действительных пользователей:
http://php.net/manual/en/reserved.variables.session.php .
Недавно я получил кибератаки и решил, что мне нужно знать пользователей, пытающихся получить доступ к панели администратора или зарезервированной части веб-приложения.
Итак, я добавил доступ к журналу для IP-адреса и пользовательских сессий в текстовом файле, потому что я не хочу беспокоить мою базу данных.
источник
Многие из этих ответов верны, но они предполагают, что у вас есть абсолютный URL, что может быть не так. Если вы хотите использовать относительный URL и генерировать остальное, то вы можете сделать что-то вроде этого ...
источник
header( 'Location: http://www.yoursite.com/new_page.html' );
источник
.htaccess
для перенаправления, но мне нужен способ каким-то образом передать, какой домен перенаправлен в окончательный домен?Используйте следующий код:
источник
Я уже ответил на этот вопрос, но я сделаю это снова, поскольку тем временем я узнал, что есть особые случаи, если вы работаете в CLI (перенаправление не может произойти и, следовательно, не должно
exit()
) или если ваш веб-сервер работает запуск PHP как (F) CGI (Status
для правильного перенаправления требуется предварительно установленный заголовок).Я также обработал вопрос о поддержке различных кодов HTTP перенаправления (
301
,302
,303
и307
), так как он был рассмотрен в комментариях моего предыдущего ответа. Вот описания:источник
Чтобы перенаправить посетителя на другую страницу (особенно полезно в условном цикле), просто используйте следующий код:
В данном случае
mypage.php
это адрес страницы, на которую вы хотите перенаправить посетителей. Этот адрес может быть абсолютным и может также включать параметры в этом формате:mypage.php?param1=val1&m2=val2)
Относительный / Абсолютный Путь
При работе с относительными или абсолютными путями, идеально выбрать абсолютный путь от корня сервера (DOCUMENT_ROOT). Используйте следующий формат:
Если целевая страница находится на другом сервере, вы включаете полный URL:
Заголовки HTTP
Согласно протоколу HTTP, заголовки HTTP должны отправляться
before
любым типом контента. Это означает, что никакие символы никогда не должны отправляться перед заголовком - даже пустое место!Временные / постоянные перенаправления
По умолчанию тип перенаправления, представленный выше, является временным. Это означает, что поисковые системы, такие как Google Search, не будут учитывать перенаправление при индексации.
Если вы хотите уведомить поисковые системы о том, что страница была постоянно перемещена в другое место, используйте следующий код:
Например, эта страница имеет следующий код:
Когда вы нажимаете на ссылку выше, вы автоматически перенаправляетесь на эту страницу. Более того, это постоянное перенаправление (статус: 301 перемещен навсегда). Таким образом, если вы введете первый URL в Google, вы будете автоматически перенаправлены на вторую, перенаправленную ссылку.
Интерпретация PHP-кода
Код PHP, расположенный после header (), будет интерпретироваться сервером, даже если посетитель переходит на адрес, указанный в перенаправлении. В большинстве случаев это означает, что вам нужен метод, чтобы следовать
header()
функцииexit()
функции, чтобы уменьшить нагрузку на сервер:источник
¶
(ближе к концу второго абзаца)? Вы имеете в виду¶
вместо этого (так что все читаетсяmypage.php?param1=val1¶m2=val2)
)? (HTML - объект пункт ) является «¶» - возможно , какая - то внешняя программа сделала преобразование?).Использование:
Это обычное и нормальное перенаправление PHP, но вы можете сделать страницу перенаправления за несколько секунд ожидания с помощью приведенного ниже кода:
источник
Накануне семантической паутины правильность - это то, что нужно учитывать. К сожалению, PHP-заголовок "Location" все еще использует код HTTP 302- directirect, который, строго говоря, не самый лучший для перенаправления. Вместо этого он должен использовать 303 .
W3C достаточно любезен, чтобы упомянуть, что заголовок 303 несовместим со «многими пользовательскими агентами до HTTP / 1.1», что в настоящее время не означает отсутствие браузера. Итак, 302 - это реликвия, которая не должна использоваться.
... или вы можете просто игнорировать это, как и все остальные ...
источник
Вы можете использовать некоторые методы JavaScript, как показано ниже
self.location="http://www.example.com/index.php";
window.location.href="http://www.example.com/index.php";
document.location.href = 'http://www.example.com/index.php';
window.location.replace("http://www.example.com/index.php");
источник
Да, вы можете использовать функцию header () ,
Кроме того, лучше всего вызывать функцию exit () сразу после
header()
функции, чтобы избежать выполнения приведенного ниже кода.Согласно документации,
header()
должен быть вызван перед отправкой любого фактического вывода.источник
Как и другие здесь сказали, отправив заголовок местоположения с:
но вам нужно сделать это до того, как вы отправите любой другой вывод в браузер.
Кроме того, если вы собираетесь использовать это для блокировки неаутентифицированных пользователей на определенных страницах, как вы упомянули, имейте в виду, что некоторые пользовательские агенты проигнорируют это и все равно перейдут на текущую страницу, поэтому вам придется умереть ( ) после отправки.
источник
but you need to do it before you've sent any other output to the browser.
Потрясающие!! Я искал минуты, почему я продолжал получать заголовки уже отправленной ошибки. +1 !!die()
это только один из способов сделать это.Вот мои мысли:
ИМХО, лучший способ перенаправить входящий запрос - использовать заголовки местоположения
После выполнения этого оператора и отправки вывода браузер начнет перенаправлять пользователя. Однако убедитесь, что перед отправкой заголовков не было никакого вывода (никакого echo / var_dump), иначе это приведет к ошибкам.
Хотя это быстрый и грязный способ достичь того, о чем изначально просили, в конечном итоге это окажется катастрофой для SEO, так как этот вид перенаправления всегда интерпретируется как перенаправление 301/302, следовательно, поисковые системы всегда будут видеть ваш индексная страница как перенаправленная страница, а не как целевая страница / главная страница.
Следовательно, это повлияет на настройки SEO сайта.
источник
Лучший способ перенаправить с помощью PHP - следующий код ...
Убедитесь, что код не будет работать после
Весь код должен быть выполнен перед строкой выше.
Предположим,
Дело 1:
Он будет правильно перенаправлен в местоположение (index.php).
Случай 2:
Приведенный выше код не будет перенаправлять в местоположение (index.php).
источник
Да, можно использовать PHP. Мы перенаправим на другую страницу.
Попробуйте следующий код:
источник
1. Использование
header
встроенной функции PHPа) Простой редирект без параметров
б) Перенаправление с параметрами GET
2. Перенаправить с помощью JavaScript в PHP
а) Простой редирект без параметров
б) Перенаправление с параметрами GET
источник
Мы можем сделать это двумя способами:
Когда пользователь заходит на https://bskud.com/PINCODE/BIHAR/index.php, затем перенаправляет на https://bskud.com/PINCODE/BIHAR.php
По приведенному ниже PHP-коду
Сохраните приведенный выше код в https://bskud.com/PINCODE/BIHAR/index.php
Если какое-либо условие выполнено, перенаправьте на другую страницу:
источник
header()
функция PHP .Использование:
источник
Есть несколько способов сделать это, но если вы предпочитаете
php
, я бы рекомендовал использовать этуheader()
функцию.В принципе
Если вы хотите повысить его, лучше использовать его в функциях. Таким образом, вы можете добавлять аутентификации и другие проверяющие элементы в него.
Давайте попробуем, проверив уровень пользователя.
Итак, предположим, что вы сохранили уровень полномочий пользователя в сеансе, который называется
u_auth
.в
function.php
Затем вы будете вызывать функцию для каждой страницы, которую вы хотите аутентифицировать.
Как и на
page.php
любой другой странице.Ссылки;
источник
Мне нравится вид перенаправления с течением времени.
источник
Использование функции заголовка для маршрутизации
Предположим, что мы хотим направить файл A.php в B.php, чем мы должны воспользоваться помощью
<button>
или<a>
. Давайте посмотрим на примерB.php
источник
Если вы работаете на Apache, вы также можете использовать .htaccess для перенаправления.
источник
Вы можете попытаться использовать
header
функцию PHP для перенаправления. Вы захотите установить выходной буфер, чтобы ваш браузер не выдавал предупреждение о перенаправлении на экран.источник
Попробуй это
источник