Вкл. http://www.hesa.ac.uk, мы используем пользовательский сценарий обработки 404, чтобы перенаправить пользователей, например, http://www.hesa.ac.uk/press на фактический URL, который является уродливым CMS: http://www.hesa.ac.uk/index.php?option=com_content&task=category§ionid=1&id=1&Itemid=161
У нас работает fast-cgi.
Отправляется заголовок 301, затем заголовок местоположения.
Он отлично работает для 99% наших пользователей, но некоторые из них сообщают 5до 6 секунд загрузки.Мы думаем, что это происходит из-за небольшого количества паразитного контента, который появляется в перенаправлении:
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://www.hesa.ac.uk/index.php?option=com_content&task=category&sectionid=1&id=1&Itemid=161">here</a></body>
Это не выводится нигде в коде, который мы можем видеть.Вот метод, который фактически выполняет перенаправление:
/**
* Do the actual redirection to the win URL
*
*/
function doRedirection() {
//start output buffering to trap any content that is output by default by the headers
@ob_start();
//permanently moved header
//header( 'HTTP/1.1 301 Moved Permanently' );
//fast-cgi, so use this:
header('Status: 301 Moved Permanently', true);
@ob_end_clean(); // clear output buffer
//location header
header( "Location: ". $this->winUrl );
@ob_end_clean(); // clear output buffer
die();
}
Я не могу найти какой-либо ресурс, который указывает, как остановить вывод этого дополнительного бита контента.Я пробовал различные варианты описанного выше способа для перенаправления.
У кого-нибудь была подобная проблема?У кого-нибудь есть идеи?
Приветствия,
G
РЕДАКТИРОВАТЬ: мы узнали, что это ожидаемое поведение для IIs7, но IIS6 никогда не делал это стот же код, и ожидаемо это или нет, наши пользователи жалуются, и это, кажется, является проблемой.
РЕДАКТИРОВАТЬ 2: кажется, что единственное реальное решение - отказаться от этого подхода и вместо этого перейти к URL-адресу IIS7функциональность переписывания, которая влечет за собой написание класса C #, который клонирует функциональность класса PHP и затем подключает его к IIS.
EDIT 3: HOWEVER, установка заголовка content-length: 0 может помочь.Пока не проверено.