включить после возврата заголовка PHP 404 Упс! Эта ссылка кажется неработающей.

Короче говоря, у меня есть динамические страницы на веб-сайте, на которых отображаются обзоры. Если нет отзывов, связанных с определенным городом/округом/районом/и т. д., запрос mysql возвращает 0 строк, что запускает следующий код:

if (!$validRevQuery) {
    header("HTTP/1.0 404 Not Found");
    include("http://{$PDS['site']}/404.php?request=".urlencode($_SERVER['REQUEST_URI']));
    exit;
}

На некоторых веб-хостингах это вызывает ошибку «Доступ к файлу URL отключен». Это нормально, но на тех, которые разрешают доступ к файлам по URL, файл 404 включается и правильно отображается. Я немного изменил код, чтобы отобразить абсолютный путь следующим образом:

if (!$validRevQuery) {
    header("HTTP/1.0 404 Not Found");
    $_GET['request'] = urlencode($_SERVER['REQUEST_URI']);
    include($_SERVER['DOCUMENT_ROOT']."/404.php");
    exit;
}

И теперь он дает мне общее «Ой! Эта ссылка, кажется, не работает». страница ошибки. (У меня есть панель инструментов Google, поэтому она может отличаться в зависимости от браузера и плагинов). Не знаю, почему это происходит, поэтому любая помощь приветствуется!


person Yev    schedule 19.10.2010    source источник
comment
Настройка $_GET['request'] работает? Не то, что я когда-либо пытался сделать. Нельзя ли просто вызвать $_SERVER['REQUEST_URI'] из 404.php? Я думал, что это сработает, поскольку веб-сервер запросил только один URI. Я считаю, что материалы Google показывают это общее сообщение, когда предоставленный контент 404 слишком мал (не уверен в точной длине символа, Google это;))   -  person chigley    schedule 19.10.2010
comment
Установка переменной GET в любом случае звучит как плохая практика.   -  person Pekka    schedule 19.10.2010
comment
установка переменной GET была просто быстрым обходным путем, и да, я делал это раньше, и это работает. Я постараюсь найти альтернативное решение. :)   -  person Yev    schedule 19.10.2010
comment
не забывайте, что $_SERVER["REQUEST_URI"] будет доступен в 404.php, если вы включите его так, как показано во втором примере! Так что, скорее всего, вам не нужно будет хранить его в любом случае.   -  person Pekka    schedule 19.10.2010


Ответы (2)


Ваша проблема не связана с тем, что вы включаете: ваша страница слишком мала.

По моему опыту, встроенная в Chrome страница «Oops» отображается, как и в Internet Explorer, когда страница выдает только заголовок 404 и меньше определенного количества байтов контента (я думаю, что в IE это 512 байт, не надо). не знаю предела в Chrome).

Я обычно дополняю свои страницы 404 несколькими сотнями байтов бессмысленного контента, завернутого в комментарии HTML, чтобы убедиться, что пользовательская страница 404 отображается.

Или, конечно же, используйте возможность для некоторых интересных ASCII Art!

   <!--                            oooo   ooo
                                   $   $  $   $
                                   "o  $ $  o""
                                     o  "   "ooooo
                                 oo ""           o$
                   o            o            oo  "
                  $$             $o$""$o  ooo$
                  $"$          o $    "$  $
        o$o       $ "$         $ $     $ $
         $$$o     $$ "$       o$ $     o $o
         "$ ""o   "$   "o     $$ "o     o"
     $o   $$   "o  $     "oo  $"  $   o$"
      "$   $o    "o$$       "o$    $o$" oo$
        "o "$o                     "$o $"$$
          "        oo$$$$$$$oo        $oo$$""      o" o
 """""""""      o$$$$$$$$$$$"$o             o"""$o$$  o$
       ooo$$$"o$$$$$$$$$$$$$$ "$o    o   o$$$o   $ $ o$
    o$$$$$$$$$$$$$$$$$$$$$$$$    "oo  o      ""o  "$ $
   $$$$$$$$$$$$$$$$$$$$$$$$$$      "$o   o$$"""$     " oo""o
o""""$$$$$$$$$$$$$$$$$$$$$$"         ""$o"$o          "   o$
     "$$$$$$$$""""$""$$$""              "$oo$""$o     o$"""
      $$$$$$$"                           $""""$"  o""""
       $"""""$ooooo        ooooo$$$$$$$     o$" o"
        $     """" oooo$$$$$$$$$$$$$$"     $"  o"
      oo$   oooo$$$$$$$$$$$"""""$$$$"    o$" o$"
    "$ $o$$$$$$$$$$$$$""$     o$$$"oooo$"  o"
      "o$ "$$$$$$$$$$$$         $$o$"$$$   $"
        "$  ""$$$$$$$$$        o$"$$$ "$$o$$
          "o   ""$$$$$$o     o$$$$ ""$o """$
            "$o    ""$$$$$$o"  o$$$$oo o$$$$
               ""$oo     $$" "$$$"" ooooooo$
                    """"$"  o$"   oo$$$$$""$$
                       $ oo$"  o$$$$$""  ooo$
                       $o$"  o$$$$"  oo$$$$$$$o
                        $$ o$$$"  o$$$$$$"""""$o
                         "o$$"  o$$$$""  o$$$$$$$o
                           "$oo$$$$"  o$$$$$""" o$o
                             "$$$" oo$$$"" oo$$$$$$$
                          ooooo$oo$$$"" oo$$$$"""$$""
                         $"oooo $$$" o$$$$""      $
                       o$"o$   $$"oo$$""       " o$
                       $ o$$o  $$o$$"          oo$$
                       $ $$$$  $$$$$$$$$$$$$$$$$$$$
                       $ $$$$  $$$$$$$$$$$$$$$$$$$$"
                       $ $$$$  $$$$$$$$$$$$$$$$$$$$
                       $ ""    ""$$$$$$$$$"""$""""
                       $o         $"$"    " $"
                        $o       $$  $o    o$
                         "$o   o$$    ""$$$"
                           """"""  -->
person Pekka    schedule 19.10.2010
comment
Пользовательский контент 404 должен быть больше 512 байт, чтобы его нельзя было игнорировать. Я бы сделал 2K бессмысленных данных, просто чтобы быть в безопасности. Многие браузеры так делают. - person Brad; 19.10.2010
comment
Вау, это имеет большой смысл. 404.php имел ошибку прямо вверху, а поскольку сообщение об ошибке было короче, скажем, 512 байт, то вообще ничего не отображалось. Спасибо! - person Yev; 19.10.2010
comment
Обратите внимание на людей, которым интересно, почему это не работает для них: это решение не работает в Firefox, если ваша страница с ошибкой не имеет заголовка Content-Length, а вместо этого использует Connection: close для завершения ответа. - person RichieHindle; 20.07.2011

Попытка перенаправления с использованием 307 или 301 с заголовком местоположения

person MANCHUCK    schedule 19.10.2010