Почему мое приложение PHP не отправляет ошибку 404? - PullRequest
141 голосов
/ 13 января 2009
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
    header('HTTP/1.0 404 Not Found');
}

Почему не работает? Я получаю пустую страницу.

Ответы [ 16 ]

1 голос
/ 22 июля 2015

Попробуйте это:

if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
    header('HTTP/1.0 404 Not Found');
    echo "<head><title>404 Not Found</title></head>";
    echo "<h1>Not Found</h1>";
    $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    echo "<p>The requested URL ".$uri." was not found on this server.</p>";
    exit();
}
1 голос
/ 17 июля 2013

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

Наш старый веб-сайт с большой коллекцией многоязычных технических документов выполнял это в условном условии if else:

    if (<no file found>){
        die("NO FILE HERE");
    }

Проблема (помимо бесполезного сообщения и плохого взаимодействия с пользователем) заключается в том, что мы обычно используем сканер ссылок (в нашем случае целостность) для проверки плохих ссылок и отсутствующих документов. Это означает, что мы получили совершенно правильный ответ 200 об ошибках, сообщающий, что там был файл. Целостность не знала, что мы ожидаем PDF, поэтому нам пришлось вручную добавить заголовок 404 с php. Если вы добавите свой код выше плашки (потому что после этого ничего не будет выполнено, а заголовок всегда должен быть перед любым визуализированным html), целостность (которая более или менее похожа на браузер) вернет 404, и мы будем точно знать, где искать пропущенные файлы. Есть более изящные способы сообщить пользователю, что есть ошибка, но, обслуживая ошибку 404, вы не только уведомляете браузеры и подобные браузеру программы об ошибке, но (я верю - исправьте меня, если я ошибаюсь), также записав эти ошибки в журналы вашего сервера, где вы можете легко grep для 404 с.

    header('HTTP/1.0 404 Not Found');
    die("NO FILE HERE");
1 голос
/ 13 января 2009

Если вы хотите, чтобы страница ошибки сервера по умолчанию отображалась, вы должны обработать это на сервере.

0 голосов
/ 11 августа 2013

Знаете, на моем сайте я создал что-то вроде этого:

        $uri=$_SERVER['REQUEST_URI'];
        $strpos=strpos($uri, '.php');
        if ($strpos!==false){
        $e404="The page requested by you: &quot".$_SERVER['REQUEST_URI']."&quot, doesn't exists on this server.";
        $maybe=str_replace('.php','',$uri);
        $maybe=str_replace('/','',$maybe);
        die("<center><h1>404</h1><hr><h3>$e404</h3><h3>Maybe try <a href=$maybe>www.leaveyortexthere.p.ht/$maybe</a>?</center>");

}

Надеюсь, это поможет вам.

0 голосов
/ 11 июля 2012

Если вы хотите показать страницу сервера 404 по умолчанию, вы можете загрузить ее в виде кадра:

echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';
0 голосов
/ 11 ноября 2010

Я пришел к этой проблеме .. Я думаю, что перенаправление на несуществующую ссылку на вашем сервере может помочь! Потому что сервер вернет свои 404:
header('Redirect abbb.404.nonexist'); <которого точно не существует </p>

...