Перенаправление пользователя

Не получается сделать редирект

Вообщем такая ситуация. Есть post запрос на jquery который вызывает функцию контроллера, которая осуществляет редирект. Но почему то редиректа не происходит. Вернее(что самое интересное) ОН ПРОИСХОДИТ, но сама страница почему не перезагружается.

А теперь по пунктам. Вот post запрос

$(document).on('click','.button_add_task', function() { $.post('index.php?r=site%2Faddtask',{ }, addtask ); function addtask(data){ console.log(data) } })

Функция контроллера(сразу скажу вызов функции контроллера точно происходит я проверял)

public function actionAddtask(){ return $this->redirect('/my_site/web/'); }

А теперь самое интересное.

По идее, что должно произойти, когда мы отправим наш пост запрос. Должен произойти редирект и страница должна перезагрузиться. Вместо этого страница НЕ презагружается, А РЕДИРЕКТ ПРОИСХОДИТ)) То что редирект происходит видно в консоли бразуера(скрин консоли прилагается к посту). То есть получается странная вещь, редирект происходит а странница не перезагружается. Подскажите с чем это может быть связано? Буду рад любым подсказкам. Заранее спасибо.

Не получается сделать 301 редирект
Не могу сделать 301 редирект. У клиента было два сайта, один старый и имеет трафик, второй молодой.

Не получается сделать редирект в .htaccess
Не получается сделать редмрект в файле .htaccess Нужно сделать редмрект с.

Не получается редирект после авторизации пользователя
у меня на сайте после авторизации выбрасывает на страницу профиля пользователя, а надо на другую на.

Читайте также:  Ubuntu run php fpm

А вы не задумывались почему у вас приходит 302 ответ от сервера, а должен приходить 200?
Так вот 302 ответ:
302 Found, 302 Moved Temporarily — запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location. Этот код может быть использован, например, при управляемом сервером согласовании содержимого. Некоторые клиенты некорректно ведут себя при обработке данного кода. Введено в HTTP/1.0.

Вы отправили асинхронный запрос к странице, на этой странице сделали редирект, и вернулся ответ, что страница находится по другому адресу.
Это неправильный подход, лучше объясните что вы хотите сделать, а мы подскажем как лучше сделать

Я хочу чтобы после обращения к функции к функции контроллера, у меня происходила перезагрузка главной страницы сайта.

Добавлено через 2 минуты
Да и вот эта функция работает в старой версии сайта, а в новой почему то нет, хотя в новой поменялась только верстка.

public function actionAddtask(){ return $this->redirect('/my_site/web/'); }

Ну так это же проще сделать в success функции запроса:
В самом простом случае это будет выглядеть так:

$(document).on('click','.button_add_task', function() { * * $.post('index.php?r=site%2Faddtask',{ * * * * }, * * * * addtask * * ); function addtask(responce){ if(responce === true) * * * * window.location.replace("http://my_site/web/"); * * } * * })

Сделали запрос к странице php, на этой странице сделали то что нужно, вернули true, на исходной странице проверили, вернулось ли true если да — редирект

Добавлено через 2 минуты

ЦитатаСообщение от mihon1 Посмотреть сообщение

Да и вот эта функция работает в старой версии сайта, а в новой почему то нет, хотя в новой поменялась только верстка.

Она и в новой работает, но вы делаете асинхронный запрос, т.е. вы сделали запрос, допустим к странице second.php — функция отработала, сделала редирект, а вам в ответ запрос возвращает что страница находиться по другому адресу(произошел редирект).

Источник

Не работает редирект

Не работает редирект
Доброй ночи! Я написал форму и сделал к ней проверки, если все норм то человек переходит на.

Не работает редирект
Всем привет! Хочу склеить сайты с WWW и без — но ничего не выходит, обыскал пол интернета, все.

Не работает редирект
нужно через мою программу запускать как дочерний процесс разные программы на паскале.вот к примеру.

Не работает редирект
Всем привет! Хочу склеить сайты с WWW и без — но ничего не выходит, обыскал пол интернета, все.

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

 echo "hello"; header('Location:http://lalala/index.php'); exit(); ?>
 header('Location:http://lalala/index.php'); exit(); ?>
 echo "hello"; header('Location:http://lalala/index.php'); exit(); ?>

Если объяснишь популярно, что ты этим хочешь добиться, и покажешь весь код (включая html-разметку) неперенаправляющегося файла, то попробую те помочь.

Добавлено через 2 минуты
а вообще может модуль какой не включен на хостинге для редиректа? хотя по твоим словам «сделал пустой файл с таким содержимым, работает перенаправление» — дб все включено.
а если так написать http://www.lalala/index.php

Так объясняю, сделал сайт на локалхосте — всё работает. перенес его на внешний хостинг, начал тестировать. на странице авторизации, есть редирект. http://presentation.gostkov.ru/
юзер: test, пароль: 1
при атворизации получаем белый экран.
Погуглив наткнулся на такой текст, что header может не работать если перед ним происходит какой то вывод на экран, я создал файл в нем только код перенправления, редирект заработал,
добавил строку echo «hello»; ставл выводить hello, я протестировал это код на локалхосте, на локалхосте происходит редирект!

Добавлено через 34 минуты
Тех.поддержка ответила:
Перед header’ом никаких вызовов быть не должно.
/* This will give an error. Note the output
* above, which is before the header() call */

т.е. твой вопрос сводится — почему на локалке редирект работает не по правилам?
я те цитату приводил, там тоже сказано, что тех.поддержка ответила. сделай как те сказали и не парься.
и вообще зачем ты echo «hello»; перед заголовком добавляешь? ради того, чтобы удедиться, что это не работает?

Добавлено через 5 минут
вроде понял, что те нужно.
гугл сказал

 header('Refresh: 3; URL=http://lalala/index.php'); echo "hi assholes. this site is another copy of google presentation"; ?>

Источник

php Почему не работает редирект Warning: Cannot modify header information — headers already sent by. Ошибка Решение

vedro-compota's picture

Возникает, если вы уже сделали что-то что требует установки заголовков браузера, а теперь хотите переписать их новыми. Например, если вы уже вывели текст — то php выставляет заголовки (в частности заголовок Location — которые показывает оставаться ли на запрошенной странице или же нужно нужно перейти на другую страницу и уже там получить ответ на запрос), чтобы показаться браузеру клиента (в своём ответе) как себя вести.

Корень проблемы

Помните, что функцию header() можно вызывать только если клиенту еще не передавались данные. То есть она должна идти первой в выводе, перед ее вызовом не должно быть никаких HTML тэгов, пустых строк и т.п. Довольно часто возникает ошибка, когда при чтении кода файловыми функциями, вроде include или require, в этом коде попадаются пробелы или пустые строки, которые выводятся до вызова header(). Те же проблемы могут возникать и при использовании одиночного PHP/HTML файла.

— то есть необходимо избавить скрипт-обработчик от html — ведь он по сути сам ничего не выводит а просто перебрасывает на другой адрес — это первое.

Далее, на самом деле заголовок Location следует менять так:

Эксперимент

Так как echo() вообще-то пишет в тело http ответа, а не в заголовки, а header возвращается void (то есть не возвращает значений), о чём было сказано выше, то смысла в использовании echo() нет, но
— тем не менее, предлагаю провести эксперимент:

— так как header() вызывается у вас по сути до echo() (так как header() является аргументом echo()) а значит возврат — заодно проверим если функция возвращает null — будет ли это интерпретироваться как пустая строка или же (что вернее) echo даже не начнёт работать как уже произойдёт редирект.

Ещё раз уточним причину

Т.е. перед вызовом header() не должен выводиться никакой контент ( о чем написано к описанию функции: http://php.net/manual/ru/function.header. )

В нашем случае судя по всему echo не влияет ни на что, а вот html в обработчике очень даже влияет.

Key Words for FKN + antitotal forum (CS VSU):

melisa's picture

вопрос решился

По Вашему совету были удалены теги HTML. Теперь переадресация происходит корректно, скрипт-обработчик выглядит так:

Функция echo действительно не влияет на работу, т.е . можно оставить и как у С. Хольцнера:

Также при оформлении кода для редиректа следует обратить внимание на расширение файла, на который производится переход: при предложенном синтаксисе, оно должно быть указано в аргументе header.

Но можно заставить работать и

Но можно заставить работать и предыдущий обработчик

       

если выставить в файле php.ini опцию

vedro-compota's picture

насчёт буферизации

По — умолчанию никакой буферизации вывода нет ( если, конечно вы не нашаманили в файле php.ini и не присвоили директиве output_buffering значение On ) и PHP отсылает данные юзеру, сразу, как только они готовы. Согласно протоколу HTTP, сервер в ответ на запрос пользователя, должен сначала отправить ему служебные заголовки, а уже после, тело страницы. А тут внезапно, в коде вы опять пытаетесь заставить его отправить HTTP — заголовки, вызывая, скажем функцию session_start() — после удачной авторизации. Ясен пень — повторная отправка заголовков запрещена, HTTP — протокол так не работает! Но что ж делать то? Если после вывода на странице, нужно ещё и сессию стартануть и кУку поставить? — Вспоминаем про буферизацию вывода.

— то есть когда выставлен ненулевой размер буфера, то пока он не заполнится ещё есть возможность манипулировать заголовками. При нулевом же размере буфера, после вывода контента, его отдача сразу же предваряется передачей клиенту заголовков http-ответа.

И получается, что мы хотим изменить заголовки, которые уже «улетели» по сети клиенту (а значит, исправить их уже невозможно — в частности заголовок Location, который указывает оставаться ли на запрошенной странице, или запросить другую — ответ скрипта-«перенаправителя» (у нас это обработчик формы) как раз говорит о том, что надо запросить другую страницу), о чем php нас и предупреждает.

Но: решать проблему таким способом конечно нельзя (не сильно корректно, точнее).

_____________
матфак вгу и остальная классика =)

Источник

Оцените статью