Forum Webscript.Ru
Программирование => PHP => Тема начата: 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\']."
-
на dklab.ru что-то похожее обсуждалось (смотри наблу про перенаправления)
-
Alexandr
Может там в первом коде просто точки не хватает? Попробуй так:
header("location: [b].[/b]/2.php");
?>
-
Люди!
С точкой, это в той же папке, а без точки - корень.
-
Alexandr
а ты попроси 1.php FlashGet-ом
и посмотри заголовки.
сдается мне, что location ты там не увидишь
-
Т.е.?
-
я думаю, что РНР просматривает то, что ты пишешь в header и поступает по=разному.
например, если в начале адреса стоит / то выполняет суб-реквест, и не посылает заголовок бровзеру.
-
Да точно, Ромка, так и есть.
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]
-
И кстати, судя по указаной выше статейке, PHP тут вовсе не причём :-)
Эт апач по разному заголовки обрабатывает, а PHP только их посылает.
-
вообще-то, РНР посылает их бровзеру, а не апачу.
-
http://dklab.ru/chicken/nablas/17.html
Header("Location: /some/other/script.html");
exit();
?>
Когда сервер получает от скрипта страницу и собирается отправить ее браузеру, он прежде всего проверяет: нет ли в ней заголовка Location с указанием URI документа. Если есть, то сервер порождает новый процесс — копию самого себя — и велит ей выполнить новый запрос, а о старом «забывает». Повторюсь: все это происходит без участия браузера, который видит лишь конечную страницу с тем же самым URL, который был у самого первого скрипта.
-
Alexandr
Понял, спасибо.
Есть еще вариант решения твоей проблемы.
Не использовать в своих скриптах $REQUERT_URI
-
Да в общем-то я уже исправил:
HomePge\'ом во всей папке заменил
location: /
location: http://".$_SERVER[\'SERVER_NAME\']."/
А насчёт Не использовать в своих скриптах $REQUERT_URI
Я из-за этого и стал эту проблему ковырять:
У мя на сайте функция, которая менюху (слева) строит, как раз использует $REQUERT_URI
напр., http://www.autodealer.ru/price/part/ (http://www.autodealer.ru/price/part/)
Вишь как прикольно! :-)
-
а мне для таких целей вполне хватает PHP_SELF :-)
-
Я тож сначала его юзал, но я ведь юзаю mod_rewrite => PHP_SELF сейчас не катит!