2009-10-15 4 views
0

Во-первых, это не проблема с уже отправленными заголовками.Проблема перенаправления PHP-заголовка (нет, не такая общая проблема)

У меня есть файл include, который выполняет перенаправление. Это работает на каждом сервере, на котором я его пробовал, кроме производственного сервера, который запускает окна.

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

У меня есть основной файл, index.php:

<?php include('red.php'); ?> 
<html .... 
> 

И я редирект на другую страницу в red.php. Затем перенаправленная страница будет отображаться вверху страницы index.php, а остальная часть файла index.php html после этой страницы.

Повредите некоторые настройки в php.ini?

После нескольких исследований проблема заключается в том, что я использую полный URL, а не относительный URL. Первый будет перенаправлять только включенный файл. (Проблема, которую я обнаружил выше)

в то время как второй работает правильно

red2.php:

header("Location: http://example.com/newfile.php "); header("Location: newfile.php");'

+2

вы можете разместить код? –

+0

да код пожалуйста. – mauris

+0

Обновлено с проблемой. – 2009-10-15 01:48:22

ответ

1

Когда я запускаю его на сервере, это только перенаправляет инклюдник, а не весь стр.

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

Возможно, это то, что вы делаете. Возможно, вы делаете включение вместо перенаправления. Помните, что переадресация выполняется следующим образом:

header('Location: file.php'); 
exit; 

Рекомендуется использовать выход в конце, поэтому выполнение не будет продолжаться без необходимости.

+1

related read: http://thephpcode.blogspot.com/2009/01/why-exit-after-header-redirect.html – mauris

+0

Проблема возникает, когда я использую полный заголовок url ​​(«Местоположение: http: // example.com/newfile.php ");» – 2009-10-15 01:51:51

0

Джон,

Я думаю, что вы смущены о том, что происходит на клиенте против того, что происходит на сервере.

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

Теперь, когда вы вызываете функцию Header() в php, это изменяет данные заголовка, которые получит браузер. Поэтому перенаправление будет осуществляться на уровне браузера, а не на уровне сервера.

Это означает, что, имея следующий код не имеет смысла:

<?php 
# Doesn't matter if you call it through include() or directly 
Header("Location: http://example.com/newfile.php"); 
?> 
<html><p>Hello world</p></html> 

Это как вы говорите браузер: Вам нужно перенаправить newfile.php, но вот некоторые HTML содержание в любом случае для вас.

Если вы хотите включить новый файл.php на стороне сервера, вам нужно использовать серверную часть Includes, CURL или просто включить («remote_file»); (Вам потребуется изменить настройки безопасности в php.ini для последних, чтобы работать, если remote_file сидит на другом сервере, а именно allow_url_fopen)

Надеются, что это помогает

+0

Нет, я не смущаюсь. Наверное, я не очень хорошо объяснил это. Я пытаюсь включить файл, который иногда имеет html, иногда он перенаправляет. Проблема заключается в том, что когда я включаю файл с полным URL-адресом, а не только имя файла, когда он перенаправляет его, он не перенаправляет всю страницу, а только перенаправляет его. Таким образом, вместо того, чтобы показывать совершенно другой контент на странице, он показывает полностью differnet-контент в верхней части страницы, а остальную часть исходного файла внизу. – 2009-10-15 04:49:20

+0

«Перенаправить только включить» не имеет абсолютно никакого смысла. Если ваша страница не настроена с использованием фреймов или фреймов, если вы правильно настроили перенаправление Header() и выходите сразу после вызова, новая страница будет показывать, не имеет значения, используете ли вы относительный или абсолютный путь. Пожалуйста, разместите весь свой код. –

+0

Да, я согласен, это не имеет смысла, следовательно, вопрос. ? Test это самостоятельно, если вы хотите у меня есть основной файл, включая другой файл с полной URL: main.php: < PHP включает в себя (" http://example.com/include.php "); ? > includes.php: <? Php header (" Адрес: http: //example.com/new.php "); ? > , и это приведет к перенаправлению только включений. Да, это не имеет смысла, я понимаю. – 2009-10-15 22:12:45

Смежные вопросы