как изменить первый возвращенный заголовок на лету

я имею в виду HTTP/1.1 xxx yyyyyyy

header я могу изменить все остальные с помощью mod_headers, но хочу иметь возможность возвращать статус 200 для страниц ошибок 403 конкретному пользовательскому агенту, который не отображает текст моих страниц 403 {он отображает альтернативную страницу}

просто спрашиваю, знает ли кто-нибудь имя env-var или заголовка, которое я могу изменить в apache.conf, чтобы каким-либо образом изменить этот заголовок {как только у меня будет это, я смогу разработать биты, специфичные для пользовательского агента


person Alan Doherty    schedule 28.01.2009    source источник
comment
это сделано специально для работы с одним пользовательским агентом {не IE} {мобильным транскодером}, который не передает текст 403 пользователю-человеку {и на странице 403 приведены подробные сведения о том, как разблокировать себя}   -  person Alan Doherty    schedule 29.01.2009


Ответы (2)


Вы можете настроить php-скрипт для своей страницы с ошибкой 403 и изменить заголовок с помощью этого скрипта:

Поместите такую ​​строку в ваш файл конфигурации .htaccess или Apache:

ErrorDocument 403 /path/to/your/error/script.php

И следующее в указанном файле php:

<?php
if($_SERVER['HTTP_USER_AGENT'] == 'FooBot 1.2') {
  header("HTTP/1.0 200 OK");
}
?>

Или сделайте то же самое на предпочитаемом вами языке.

person Erik Bakker    schedule 28.01.2009
comment
это похоже на единственный вариант, но он предпочел бы по умолчанию обслуживать html, а не php, поскольку накладные расходы на обработку php {из тестов} довольно велики, когда 99% из 403 запросов переходят к ранее запрещенным и вредоносным ботам. - person Alan Doherty; 29.01.2009
comment
в настоящее время демонстрирует ваше решение на www.alandoherty.net, и да, оно позволяет отображать пользовательскую страницу 403 в Google Wireless Transcoder www.google.com/gwt/m, но ждет, чтобы узнать, знает ли кто-нибудь способ сделать это через http. conf mod_headers или другой, если нет, я отмечу ваш ответ как лучший - person Alan Doherty; 29.01.2009
comment
текущее решение php значительно медленнее, но работает {обнаружение пользовательского агента перенесено в apache для ускорения} httpd.conf SetEnvIfNoCase User-Agent Google\ Wireless\ Transcoder google-proxy, таким образом, в php if (isset($_SERVER['google-proxy'])) заголовок (HTTP/1.0 200 ОК); так как это значительно ускоряет - person Alan Doherty; 29.01.2009
comment
но тот же контент в shtml Время на запрос: 0,880 [мс] (среднее) Время на запрос: 0,880 [мс] (среднее, по всем одновременным запросам) по сравнению с php Время на запрос: 1,170 [мс] (среднее) Время на запрос: 1,170 [мс] (в среднем по всем одновременным запросам) - person Alan Doherty; 29.01.2009
comment
Это звучит интересно. Я предлагаю вам также опубликовать свое лучшее решение в качестве ответа, чтобы другим было легче его найти! - person Erik Bakker; 29.01.2009
comment
хорошо, пока не появится другое решение лучше, чем php, это банкомат, но не понимаю, почему apache не предлагает это через какой-то модуль/настройку {который устраняет значительно более медленную необходимость php} - person Alan Doherty; 29.01.2009

Это не заголовок, это строка состояния.

Ложь о статусе ответов часто может вызвать проблемы, например, средства проверки ссылок не сообщат о таких ошибках. Вы полагаетесь на то, что человек прочитает 200 страниц и поймет ее, но весь смысл компьютерных протоколов в том, что они могут быть поняты и компьютерами. Вы должны попытаться решить проблему, а не скрывать ее.

Мне кажется, что вы столкнулись с тем, что Internet Explorer настаивает на «дружественных» страницах ошибок. Вы можете обойти это, заполнив страницу с ошибкой так, чтобы она была больше 512 байт, что затем заставляет Internet Explorer отображать страницу с ошибкой вместо своей собственной.

person Jim    schedule 28.01.2009
comment
на самом деле не все пользовательские агенты бар 1 показывают пользовательскую страницу 403, которая позволяет ранее злонамеренному и запрещенному ip-адресу разблокировать себя через капачу, но пользовательский агент мобильного транскодера Google не возвращает 403 пользователю, он дает страницу недоступную или сервер не работает - person Alan Doherty; 29.01.2009
comment
если бы он {и только он} получил HTTP/1.1 200 OK, вместо этого он отобразил бы текст вашего IP-адреса в черном списке, потому что .... и вот как повторно получить доступ к странице Google Mobile Transcoder {и бедные пользователи телефонов застряли с ним} являются единственной причиной для этого - person Alan Doherty; 29.01.2009
comment
в настоящее время я просто не баню {внесенный в белый список} эти IP-адреса, но недостатком является то, что {почти} все сборщики теперь используют его, чтобы избежать этих автоматизированных систем обнаружения / защиты от плохих пауков. - person Alan Doherty; 29.01.2009