Forum Webscript.Ru

Программирование => PHP => Тема начата: Alexandr от 31 Октября 2002, 09:50:15

Название: Мистика с header("location...
Отправлено: Alexandr от 31 Октября 2002, 09:50:15
Пишем:
1.php

header("location: /2.php");
?>

2.php

echo $REQUEST_URI;
?>


Запускаем 1.php и видим:
/1.php
Странно..... ведь должен был произойти редирект и напечататься
/2.php

Теперь правим 1-й PHP

header("location: 2.php");
?>

А вот тут всё OK.
Пишет /2.php
Ну или так

header("location: http://".$_SERVER[\'SERVER_NAME\']."/2.php");
?>

То тоже всё ок.

Ни кто с этим не сталкивался? Как лечится? Или придётся везде юзать относительный редирект? Или лучше везде добавлять http://".$_SERVER[\'SERVER_NAME\']."
Название: Мистика с header("location...
Отправлено: Макс от 31 Октября 2002, 12:08:17
на dklab.ru что-то похожее обсуждалось (смотри наблу про перенаправления)
Название: Мистика с header("location...
Отправлено: Nevermind от 01 Ноября 2002, 02:31:01
Alexandr
Может там в первом коде просто точки не хватает? Попробуй так:
header("location: [b].[/b]/2.php");
?>
Название: Мистика с header("location...
Отправлено: giba от 01 Ноября 2002, 03:24:34
Люди!
С точкой, это в той же папке, а без точки - корень.
Название: Мистика с header("location...
Отправлено: Меняздесьдавнонет от 01 Ноября 2002, 11:46:47
Alexandr
а ты попроси 1.php FlashGet-ом
и посмотри заголовки.
сдается мне, что location ты там не увидишь
Название: Мистика с header("location...
Отправлено: Alexandr от 04 Ноября 2002, 11:51:27
Т.е.?
Название: Мистика с header("location...
Отправлено: Меняздесьдавнонет от 04 Ноября 2002, 12:19:09
я думаю, что РНР просматривает то, что ты пишешь в header и поступает по=разному.
например, если в начале адреса стоит / то выполняет суб-реквест, и не посылает заголовок бровзеру.
Название: Мистика с header("location...
Отправлено: Alexandr от 04 Ноября 2002, 12:49:36
Да точно, Ромка, так и есть.
http://dklab.ru/chicken/nablas/17.html (http://dklab.ru/chicken/nablas/17.html)

И что, получается выход - использовать только такую конструкцию
header("location: http://".$_SERVER[\'SERVER_NAME\']."/2.php");
?>
вместо удобной такой:
header("location: /2.php");
?>

[OFF]
Относительные урлы я думаю отпадают, т.к. начнут появлятся, напр., такие уродливые конструкции ../../some_script.php
[/off]
Название: Мистика с header("location...
Отправлено: Alexandr от 04 Ноября 2002, 12:52:11
И кстати, судя по указаной выше статейке, PHP тут вовсе не причём :-)
Эт апач по разному заголовки обрабатывает, а PHP только их посылает.
Название: Мистика с header("location...
Отправлено: Меняздесьдавнонет от 04 Ноября 2002, 13:17:57
вообще-то, РНР посылает их бровзеру, а не апачу.
Название: Мистика с header("location...
Отправлено: Alexandr от 04 Ноября 2002, 13:31:27
http://dklab.ru/chicken/nablas/17.html

Цитировать
Header("Location: /some/other/script.html");
exit();
?>

Когда сервер получает от скрипта страницу и собирается отправить ее браузеру, он прежде всего проверяет: нет ли в ней заголовка Location с указанием URI документа. Если есть, то сервер порождает новый процесс — копию самого себя — и велит ей выполнить новый запрос, а о старом «забывает». Повторюсь: все это происходит без участия браузера, который видит лишь конечную страницу с тем же самым URL, который был у самого первого скрипта.
Название: Мистика с header("location...
Отправлено: Меняздесьдавнонет от 04 Ноября 2002, 14:30:48
Alexandr
Понял, спасибо.

Есть еще вариант решения твоей проблемы.
Не использовать в своих скриптах $REQUERT_URI
Название: Мистика с header("location...
Отправлено: Alexandr от 04 Ноября 2002, 16:19:15
Да в общем-то я уже исправил:
HomePge\'ом во всей папке заменил
location: /
location: http://".$_SERVER[\'SERVER_NAME\']."/

А насчёт
Цитировать
Не использовать в своих скриптах $REQUERT_URI

Я из-за этого и стал эту проблему ковырять:
У мя на сайте функция, которая менюху (слева) строит, как раз использует $REQUERT_URI
напр., http://www.autodealer.ru/price/part/ (http://www.autodealer.ru/price/part/)

Вишь как прикольно! :-)
Название: Мистика с header("location...
Отправлено: Меняздесьдавнонет от 04 Ноября 2002, 17:07:52
а мне для таких целей вполне хватает PHP_SELF :-)
Название: Мистика с header("location...
Отправлено: Alexandr от 04 Ноября 2002, 18:14:06
Я тож сначала его юзал, но я ведь юзаю mod_rewrite => PHP_SELF сейчас не катит!