Заголовок PHP() вызывает внутреннюю ошибку сервера


По какой-то причине вызов функции header() вызывает у меня внутреннюю ошибку сервера. Я использую PHP5 и широко использую mod_rewrite в этом скрипте (если это поможет). Вот код (своего рода):

<?php 

include 'core/initialize.php'; // Loads the core class (and session manager class)

    if($_GET['reset'] == 'true')
    {
         $core->Session->Visits = 0;
         header('Location', 'index.html');
         # header('X-Test', 'wtf'); // causes the error too :(
    }
    if(isset($core->Session->Visits)) $core->Session->Vists += 1;
    else $core->Session->Visits = 0;
    echo "Previous Visits: {$core->Session->Visits} (<a href='index.html?reset=true'>Reset</a>)";
?>

Мой файл .htaccess выглядит так:

# Start up the rewrite engine
Options +FollowSymLinks
RewriteEngine on

RewriteRule  ^(.*)$ navigator.php?nav=$1&%{QUERY_STRING} [NC]  
 4
Author: pnuts, 2009-08-01

1 answers

Вы используете это:

header('Location', 'index.html');

Это не тот путь header необходимо использовать: второй параметр должен быть логическим.

И первым должно быть имя заголовка + значение.

Итак, в вашем случае что-то вроде этого:

header('Location: index.html');

Только один параметр; и имя + ':' + значение :-)

В документации есть пример:

Вторым частным случаем является заголовок "Местоположение:". Он не только посылает этот заголовок возвращается в браузер, но он также возвращает ПЕРЕНАПРАВЛЕНИЕ (302) код состояния для браузера, если только некоторые код состояния 3xx уже установлен.

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>


В качестве примечания, если я правильно помню, вы должны использовать ПОЛНЫЙ абсолютный URL-адрес при использовании заголовка Location; Я знаю, что использование относительного URL-адреса работает (почти?) во всех браузерах, но это недопустимо при чтении HTTP RFC, если я правильно помню.


В качестве второго примечания (да, ответ уже дан было принято, но, возможно, это все равно будет полезно в следующий раз :-) ) : эта "Внутренняя ошибка сервера" может указывать на то, что ваш PHP-скрипт столкнулся с какой-то ошибкой.

В этом случае вам следует проверить файл error_log...
...Или активировать error_reporting и display_errors для облегчения работы - по крайней мере, на вашей машине разработки.

 9
Author: Pascal MARTIN, 2009-07-31 23:18:18