За последние 24 часа нас посетили 62085 программистов и 1788 роботов. Сейчас ищут 829 программистов ...

Header("HTTP/1.0 200 OK") а статус всё равно 404

Тема в разделе "PHP для новичков", создана пользователем izstora, 12 ноя 2007.

  1. izstora

    izstora Активный пользователь

    С нами с:
    9 ноя 2007
    Сообщения:
    15
    Симпатии:
    0
    Всем привет!

    При обработке псевдопути, если всё ok, движок выдает статус 200 таким образом
    PHP:
    1. Header("HTTP/1.0 200 OK");
    В связке с php_temlates и скомпилированным php как cgi не работает.
    Помогите, плз. Тяжко жить когда все страницы на сайте 404
     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Используйте нормальный mod_rewrite, а не извращения через 404.
    В CGI насколько помню нельзя заголовок со статусом ответа выдавать.
    Попробуйте header('Status: 200 Ok')
     
  3. izstora

    izstora Активный пользователь

    С нами с:
    9 ноя 2007
    Сообщения:
    15
    Симпатии:
    0
    vasa_c, вы меня спасли!
    header('Status: 200 Ok') помогло!

    Если не секрет, в чем разница?
     
  4. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    А фиг его :)

    Status апач потом переделывает в HTTP...
     
  5. izstora

    izstora Активный пользователь

    С нами с:
    9 ноя 2007
    Сообщения:
    15
    Симпатии:
    0
    да... странно....
     
  6. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    vasa_c
    izstora
    Потому, что в запросе наверняка было HTTP 1.1 :)
     
  7. izstora

    izstora Активный пользователь

    С нами с:
    9 ноя 2007
    Сообщения:
    15
    Симпатии:
    0
    я извиняюсь, в каком запросе?

    Header("HTTP/1.1 200 OK") - пробовал
     
  8. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    izstora
    GET. Это была шутка :)
     
  9. izstora

    izstora Активный пользователь

    С нами с:
    9 ноя 2007
    Сообщения:
    15
    Симпатии:
    0
    Dagdamor,
    я не понял... ну ничего
     
  10. skazo4nik

    skazo4nik Активный пользователь

    С нами с:
    31 окт 2007
    Сообщения:
    11
    Симпатии:
    0
    http://bugs.php.net/bug.php?id=27345
    вроде этот баг

    Отличие в подключении пхп - если как модуль или как cgi - должны посылаться разные статусы

    PHP:
    1. $sapi_type = php_sapi_name();
    2. if (substr($sapi_type, 0, 3) == 'cgi') {
    3.     echo "You are using CGI PHP\n"; // Надо отдавать header("Status: ");
    4. } else {
    5.     echo "You are not using CGI PHP\n"; // надо отдавать header("HTTP/1.1"), лучше header($_SERVER['SERVER_PROTOCOL'])
    6. }
    7.  
     
  11. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Радует ответ разработчиков :D

     
  12. izstora

    izstora Активный пользователь

    С нами с:
    9 ноя 2007
    Сообщения:
    15
    Симпатии:
    0
    :)

    Продолжаем тему!

    Со статусом справились, но перестала работать функция redirect()

    PHP:
    1. function redirect($url) {
    2.     if (!$url) return false;
    3.     Header("Content-Length: 0");
    4.     Header("Location: ".AddSid($url));
    5.     exit;
    6. }
    7.  
    где AddSid

    PHP:
    1.  
    2. function AddSid($url) {
    3.     if (!session_id() || (session_id() && $GLOBALS['_COOKIE'][session_name()])) return $url;
    4.     $sid = (defined("SID") && SID)?SID:session_name()."=".session_id();
    5.     $sign = (strpos($url, "?")!==false)?"&":"?";
    6.     return (strpos($url, session_name())===false)?$url.$sign.$sid:$url;
    7. }
    8.  
    Опять что-то с функцией Header() ???
     
  13. _Миха_

    _Миха_ Новичок

    С нами с:
    11 авг 2016
    Сообщения:
    4
    Симпатии:
    0
    А в чём извращение-то. Как раз с mod_rewrite и получается извращение. Если в первом случае, сервер поступает быстро и просто, нет файла - запускаем index.php. То во-втором случае: нет файла, читаем команды для mod_rewrite, в особо "чудесных" случаях, выполняем сложные регулярные выражения, наконец запускаем index.php, и там ещё разбираем урл.. это ж сколько ресурсов на ветер.. парни Вы в своём уме.
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @_Миха_ привет, некропостер! Давай поясню тебе в чем извращение. В случае ердока сервер не нашел файл, установил статус 404 и запускает пхп машину для того чтоб она показала красивую страничку статуса 404. В случае рерайта - разрешенный ресурс не обнаружился, переписали запрос, запустили пхп машину и она уже в свою очередь решает есть ресурс или нет ресурса. То есть в первом случае статус 404 и пхп только для красивости, во втором случае статус любой и пхп в качестве роутера.

    Бояться регулярок при мощности современных процессоров - глупо. Но, да, компилировать регулярки на каждом запросе - тоже глупо. И этот момент легко лечится выносом правил рерайта из аксес-файлов.

    Твой вброс, которым ты начал свою историю на этом ресурсе (еще к тому же дернув пост почти десятилетней давности), показывает, что ты не обладаешь необходимыми знаниями в обсуждаемой тематике. Стало быть не вброс, а высер. А ты - либо аутист, либо троляка. Добро пожаловать!
     
    mr.akv нравится это.
  15. _Миха_

    _Миха_ Новичок

    С нами с:
    11 авг 2016
    Сообщения:
    4
    Симпатии:
    0
    Нет друг не убедил, давай разбираться, Привет! Ты хочешь сказать что многоходовка с mod_rewrite лучше комбинации в два хода с ErrorDocument, не верю. Но ты конечно лучше разбираешься. Смотрим на задачу и там как мы видим ничего сложного не требуется, а именно запустить нужный файл при обращение к несуществующей странице для обработки урла. Давай по пунктам. 1. есть скажем 404.php для обработки несуществующих url. 2. Вызываем 404.php через ErrorDocument 404 и делаем с запросом всё что хотим, в том числе ставим «header 200».

    За чем использовать mod_rewrite?
    За чем использовать регулярные выражения?
    За чем выносить правила из аксес-файлов?
    За чем столько не нужных ходов, когда есть ErrorDocument специально сделанный для этих случаев?

    Ситуация с багом «header 200» известна, известны и способы лечения без mod_rewrite .

    Я не троляка и не аутист, я простой российский программист :).
    И решать проблемы за счёт железа всегда считал плохим тоном для хорошего программиста. Есть же принципы!
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да не, ты пожалуй троляка. И очень слабый программист, раз не понимаешь реального назначения инструментов. Выше аргументировано. Ердок он ровно для того чтоб показать документ ошибочного статуса. НЕ ДЛЯ РОУТЕРА. Максимум - чтоб врисовать урлик в шаблончик. Рерайтер придумал для гибкой модификации контекста запроса. То есть ровно за тем, зачем его используют (да, слово "зачем" пишется слитно. Ты четыре раза опечатался. Покахивает @askanim ом. Он тоже русского не знает, как и ты).

    Ну давай по пунктам.

    Рерайт как подготовка к пхп-роутингу - правильно и по назначению. Ердок как точка входа в пхп-роутинг неправильно из-за контекста. Роутинг чего может быть, если сервер уже знает, что ресурса не существует?

    И правда, зачем? Грамотные правила рерайта в контексте задачи заворота запросов на пхп-машину - не содержат регулярных выражений, сводясь только к проверке существования ресурса. То есть ровно тот же набор проверок, что и у ердока, только потом начинается разница. Ердок уже считает, что ошибка состоялась и запускает пхп-машину, запрашивая у нее юзерфрендли контент для контекста, а рерайтер запускает пхп-машину, чтоб она сама поискала ресурс и выдала любой допустимый статус и контент. Всё еще не видно разницы?

    Как зачем? Для скорости. В документации написано. Не читал?

    Ердок не для этих случаев сделан. Рерайтер для них.

    Вот как-то так.

    да. И для апачи принципиально, чтоб ердок использовался по своему назначению, а рерайтер по своему. Не надо ничего придумывать.
     
    miketomlin, mr.akv и denis01 нравится это.
  17. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    ну ну
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну-ну :cool:
     
  19. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Ganzal :cool: ты как word, но спасибо лучше подскажи в другом месте, где я тебе ответил и скажи правильно ли я поставил (.- ). Вот это я реал не знаю как правильно написать.
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну а что мешает русский-то подтянуть и знать?
     
  21. _Миха_

    _Миха_ Новичок

    С нами с:
    11 авг 2016
    Сообщения:
    4
    Симпатии:
    0
    А ты крепкий дебил судя по всему. С одной стороны соглашаешься, с другой протестуешь.
    Тебе задачу ставят траншею выкопать, а ты ров роешь, да ещё и не там!

    Кроме тебя здесь пхп-программистов нет что ли. И кстати тебя никто не оскорблял, пока, а пригласили на диалог, но это лирика.. По существу. Между за и чем идёт мат, это чтоб ты параноик дальше понимал ЗА каким на ;%:?*() ЧЕМ пробел.

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

    И возвращаясь к задаче, тебе что надо POST обрабатывать, нет, за чем тогда тебе роутер, за чем этот изврат с mod_rewrite.

    Тебе дураку дали одну строчку ErrorDocument, а ты предлагаешь вместо неё писать регулярные выражения и не важно где. А какой скорости можно говорить, противоречивый ты дурачок.

    А если тебе нужен роутер так и создай специальную страницу, хотя в любом случае этот способ для дебилов как уже писалось выше, Апач вообще не для этого тогда уж!
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Сильно :D
     
    miketomlin и mr.akv нравится это.
  23. _Миха_

    _Миха_ Новичок

    С нами с:
    11 авг 2016
    Сообщения:
    4
    Симпатии:
    0
    Да ладно парни, докажите что mod_rewrite это круто и быстро, или идите... по известному адресу спецы епта.. :) Может вы ещё пхп как cgi используете... а апач в роли фаерволы не используете, только как роутер ))))
     
  24. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    А чего нам доказывать-то? Примерно 100% веба используют рерайтер по назначению, и не обламываются. Еще примерно столько тех, кто пользуется nginx и отказался от apache - используют рерайтер nginx. И опять же не обламываются. Хочешь использовать ердок для этих целей - используй. Представляю, как ты на собеседовании будешь с пеной у рта доказывать, что рерайтер - говно.
     
    mr.akv нравится это.
  25. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    @_Миха_, я тебе больше скажу, тут многие как бы и апач то уже не используют. Так, к сведению.
    --- Добавлено ---
    опоздал :D