включить после возврата заголовка PHP 404 «К сожалению! Эта ссылка, похоже, сломана.

17

Короче говоря, у меня есть динамические страницы на веб-сайте, на котором отображаются отзывы. Если нет отзывов, связанных с конкретным городом / уездом / областью / etc, запрос 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, поэтому это может быть различным в зависимости от браузера и плагинов). Не знаю, почему это происходит, поэтому любая помощь приветствуется!

    
задан Yev 19.10.2010 в 17:38
источник
  • Работает ли настройка $ _GET ['request']? Не то, что я когда-либо пытался сделать. Не можете ли вы просто вызвать $ _SERVER ['REQUEST_URI'] из 404.php? Я бы подумал, что это сработает, поскольку веб-сервер запрашивает только один URI. Я считаю, что материал Google показывает, что общее сообщение, когда предоставленное 404 содержимое слишком мало (не уверен, что именно длина символа, Google это;)) –  chigley 19.10.2010 в 17:43
  • Установка переменной GET звучит как неудачная практика. –  Pekka 웃 19.10.2010 в 17:44
  • настройка переменной GET была просто быстрым решением, и да, я сделал это раньше, и это работает. Я попытаюсь найти альтернативное решение. :) –  Yev 19.10.2010 в 17:50
  • не забывайте, что $ _SERVER ["REQUEST_URI"] будет доступен в 404.php, если вы включите его так, как вы показываете в своем втором примере! Скорее всего, вам не нужно будет хранить его в любом случае. –  Pekka 웃 19.10.2010 в 17:53

2 ответа

42

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

По моему опыту, отображается встроенная страница «Упс» Chrome, такая как в Internet Explorer, когда страница выдает только заголовок 404 и меньше определенного количества байтов содержимого (я думаю, что это 512 байт в IE, не знаю предела в 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$$    ""$$$"
                           """"""  -->
    
ответ дан Pekka 웃 19.10.2010 в 17:42
  • Пользовательский контент 404 должен быть больше 512 байт, чтобы его не игнорировать. Я бы сделал 2K бессмысленных данных, чтобы быть в безопасности. Многие браузеры делают это. –  Brad 19.10.2010 в 17:45
  • Woah, это имеет большой смысл. 404.php имела ошибку справа вверху, и поскольку сообщение об ошибке было короче, скажем, 512 байт, оно вообще ничего не отображало. Спасибо! –  Yev 19.10.2010 в 17:52
  • Примечание для людей, интересующихся, почему это не работает для них: это решение не работает в Firefox, если ваша страница ошибки не имеет заголовка Content-Length, но вместо этого полагается на Connection: близко к завершению ответа. –  RichieHindle 20.07.2011 в 12:16
-4

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

    
ответ дан MANCHUCK 19.10.2010 в 17:45