Страницы

Поиск по вопросам

Показаны сообщения с ярлыком редирект. Показать все сообщения
Показаны сообщения с ярлыком редирект. Показать все сообщения

воскресенье, 8 марта 2020 г.

Редирект на 404 страницу

#php #http #редирект #header


В .htaccess прописал:

ErrorDocument 404 /views/error.html


В скрипте отправляю заголовок:

header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true, 404);
exit();


Перенаправление не срабатывает.
Пробовал и так писать:

header('HTTP/1.1 404 Not Found', true, 404);
header('HTTP/1.0 404 Not Found', true, 404);
header('HTTP/1.1 404 Not Found');
header('HTTP/1.0 404 Not Found');


Не срабатывает всё равно. Может что-то дописать нужно ещё?
    


Ответы

Ответ 1



ErrorDocument верно срабатывает, когда реально нет страницы. Передача заголовка лично у меня тоже верно сработала, и в целом должна верно срабатывать, если сервер и php верно настроены. Но при этом во втором пункте apache уже не собирается переадресацию какую-то делать, так как он не видит в этом смысла - ErrorDocument срабатывает именно что на реальное отсутствие страницы или отсутствие правил редиректа для запрошенного адреса, когда же страница просто отдает код 404 - это ее дело. Далее подразумевается, что нужно самому вывести нужное. То есть либо заинклудить целиком страницу, лежащую по пути /views/error.html примерно таким кодом: if (we_have_404) { header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true, 404); include "/views/error.html"; exit(); } дабы минимизировать повторяющийся код на сайте, либо выводить что-либо свое.

четверг, 26 декабря 2019 г.

Как сделать редирект так, чтобы он работал в Google Chrome?

#редирект #php #javascript


Версия Google Chrome - 25.0.1364.172 m
Принцип работы такой:

Пользователь посещает страницу (скрипт №1)
Он выполняется
После этого отправляется заголовок (редирект на скрипт №2)
Скрипт №2 принимает эстафету
Выполняется
Возвращает эстафету скрипту №1 и скрипт №1 показывает результат

Проблема в защите браузера. Если я делаю заголовками, возникает ошибка 310. А если
пытаюсь закончить работу скрипта №2 выводом в браузер редиректирующего javascript кода
или мета-тега refresh, браузер просто зацикливается обновляя страницу (скрипт №2),
даже если указано, что переадресовывать нужно на другой поддомен, не говоря уже о другой
директории этого же домена. Переадресовывает только если домен назначения совсем другой.
У кого-нибудь есть мысли в чём может быть причина такого странного поведения браузера?
И что делать? Нужно чтобы такой принцип эстафеты работал во всех браузерах.
UPD
Зачем тут код, если вопрос не про код? Ну да ладно. Код примерно такой:
script1.php


script2.php


Только весь смысл в том, что в первом скрипте сначала идёт условие, и если оно не
выполняется, то тогда идёт обращение ко второму скрипту, который заносит в базу данных
необходимые данные и когда второй скрипт доделывает свои дела, должен повторяться запрос
к первому скрипту, в котором условие уже будет выполняться (благодаря проделанной работе
второго скрипта) и соответственно первый скрипт уже не будет обращаться ко второму
скрипту и будет производить совсем другие действия не связанные с редиректами.
UPD2
script1.php


script2.php


Простой пример с сессионной переменной. Ну уж теперь-то все поняли логику? :))) Я
понимаю, что можно всё в одном скрипте сделать и это будет прекрасно работать, но мне
интересно, можно ли как-нибудь распределить обязанности на разные скрипты, чтобы они
работали по принципу передачи эстефетной палочки, ну или как бы играли в "сифу" до
определённого момента. :) Я не знаю уже как мальчикам объяснить то, чего я хочу добиться
от Google ChromА. :)))))
UPD 3
То что я привела в пример - я не тестировала и это работает да, но почему-то, когда
работают два настоящих больших скрипта, происходят глюки или ошибки описанные выше
и причём только в Google Chrome, хотя в скриптах нет ничего особенного и в общем смысле
они логически сложены так же как мой пример с сессиями, только скрипты работают с базой
данных и не передают друг другу ничего, а просто первый говорит второму - "у меня нет
данных, поработай-ка и ты". Код прикладывать не буду, потому что мне совесть не позволит
просить кого-нибудь в нём разобраться. :)))
Простите за "охоту за приведениями". :) Всем большое спасибо, особенно @eicto и моему
другу @ReinRaus. :)))    


Ответы

Ответ 1



Используйте Ajax для этого: сделайте логику запроса нужных скриптов на клиенте и проблема отпадет сама собой, т.к. редирект будет не нужен. Использовать редиректы "туда-обратно" - антипаттерн, который явно фильтруется браузерами.

суббота, 25 мая 2019 г.

Редирект на 404 страницу

В .htaccess прописал:
ErrorDocument 404 /views/error.html
В скрипте отправляю заголовок:
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true, 404); exit();
Перенаправление не срабатывает. Пробовал и так писать:
header('HTTP/1.1 404 Not Found', true, 404); header('HTTP/1.0 404 Not Found', true, 404); header('HTTP/1.1 404 Not Found'); header('HTTP/1.0 404 Not Found');
Не срабатывает всё равно. Может что-то дописать нужно ещё?


Ответ

ErrorDocument верно срабатывает, когда реально нет страницы. Передача заголовка лично у меня тоже верно сработала, и в целом должна верно срабатывать, если сервер и php верно настроены. Но при этом во втором пункте apache уже не собирается переадресацию какую-то делать, так как он не видит в этом смысла - ErrorDocument срабатывает именно что на реальное отсутствие страницы или отсутствие правил редиректа для запрошенного адреса, когда же страница просто отдает код 404 - это ее дело. Далее подразумевается, что нужно самому вывести нужное.
То есть либо заинклудить целиком страницу, лежащую по пути /views/error.html примерно таким кодом:
if (we_have_404) { header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true, 404); include "/views/error.html"; exit(); }
дабы минимизировать повторяющийся код на сайте, либо выводить что-либо свое.