if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Почему это не работает? У меня пустая страница.
php
header
http-status-code-404
данортон
источник
источник
Ответы:
Ваш код технически правильный. Если вы посмотрите на заголовки этой пустой страницы, вы увидите заголовок 404, и другие компьютеры / программы смогут правильно определить ответ как файл, который не найден.
Конечно, ваши пользователи по-прежнему SOL. Обычно сообщения 404 обрабатываются веб-сервером.
Проблема в том, что как только веб-сервер начинает обрабатывать страницу PHP, он уже прошел точку, в которой он будет обрабатывать 404
Помимо предоставления заголовка 404, PHP теперь отвечает за вывод фактической страницы 404.
источник
if (strstr($_SERVER['REQUEST_URI'],'index.php')){ header('HTTP/1.0 404 Not Found'); echo "<h1>404 Not Found</h1>"; echo "The page that you have requested could not be found."; exit(); }
Если вы посмотрите на последние две строки эха, вы увидите их содержимое. Вы можете настроить его, как хотите.
источник
Это правильное поведение , вам решать, создавать содержимое для страницы 404.
Заголовок 404 используется пауками и менеджерами загрузки, чтобы определить, существует ли файл.
(Страница с заголовком 404 не будет индексироваться Google или другими поисковыми системами)
Однако обычные пользователи не смотрят http-заголовки и используют страницу как обычную страницу.
источник
Для записи это универсальный обработчик:
<?php header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); header("Status: 404 Not Found"); $_SERVER['REDIRECT_STATUS'] = 404; ?> <!-- 404 contents below this line -->
источник
die()
требуется?Загрузите страницу 404 сервера по умолчанию, если она у вас есть, например, определенная для apache:
if(strstr($_SERVER['REQUEST_URI'],'index.php')){ header('HTTP/1.0 404 Not Found'); readfile('404missing.html'); exit(); }
источник
Начиная с php 5.4 теперь вы можете делать
http_response_code(404);
источник
Другое решение, основанное на @ Kitet's.
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); header("Status: 404 Not Found"); $_SERVER['REDIRECT_STATUS'] = 404; //If you don't know which web page is in use, use any page that doesn't exists $handle = curl_init('http://'. $_SERVER["HTTP_HOST"] .'/404missing.html'); curl_exec($handle);
Если вы программируете веб-сайт, размещенный на сервере, которым вы не можете управлять, вы не будете знать, какой файл является «404missing.html». Однако вы все еще можете это сделать.
Таким образом, вы обеспечили тот же результат, что и обычная страница 404 на том же сервере. Наблюдатель не сможет различить существующую страницу PHP, возвращающую 404, и несуществующую страницу.
источник
попробуйте с:
header("Status: 404 Not Found"); header('HTTP/1.0 404 Not Found');
До свидания!
источник
Немного укороченная версия. Подавить нечетное эхо.
if (strstr($_SERVER['REQUEST_URI'],'index.php')){ header('HTTP/1.0 404 Not Found'); exit("<h1>404 Not Found</h1>\nThe page that you have requested could not be found."); }
источник
if($_SERVER['PHP_SELF'] == '/index.php'){ header('HTTP/1.0 404 Not Found'); echo "<h1>404 Not Found</h1>"; echo "The page that you have requested could not be found."; die; }
никогда не упрощайте эхо-операторы и никогда не забывайте точку с запятой, как указано выше, а также зачем запускать substr на странице, мы можем легко просто запустить php_self
источник
Если вы хотите, чтобы отображалась страница ошибок сервера по умолчанию, вы должны обработать это на сервере.
источник
Вы делаете это правильно, хотя это требует некоторой доработки. Похоже, это уже решено, поэтому давайте поговорим о практических преимуществах приложения:
Наш старый веб-сайт с большой коллекцией многоязычной технической документации выполнял это внутри условного if else:
if (<no file found>){ die("NO FILE HERE"); }
Проблема (помимо бесполезного сообщения и плохого взаимодействия с пользователем) в том, что мы обычно используем сканер ссылок (в нашем случае целостность) для проверки плохих ссылок и недостающих документов. Это означает, что мы получили совершенно правильный ответ 200 без ошибок, говорящий нам, что там был файл. Integrity не знала, что мы ожидаем PDF-файл, поэтому нам пришлось вручную добавить заголовок 404 с помощью php. Добавив свой код над кристаллом (потому что впоследствии ничего не будет выполняться, а заголовок всегда должен быть перед любым визуализированным html), целостность (которая ведет себя более или менее как браузер) вернет 404, и мы точно знаем, где искать отсутствующие файлы. Есть более элегантные способы сообщить пользователю, что произошла ошибка,
header('HTTP/1.0 404 Not Found'); die("NO FILE HERE");
источник
Попробуй это:
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(); }
источник
Знаете, на своем сайте я создал что-то вроде этого:
$uri=$_SERVER['REQUEST_URI']; $strpos=strpos($uri, '.php'); if ($strpos!==false){ $e404="The page requested by you: "".$_SERVER['REQUEST_URI']."", 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>"); }
Надеюсь, это вам поможет.
источник
Я столкнулся с этой проблемой ... Я думаю, что перенаправление на несуществующую ссылку на вашем сервере может помочь! Потому что сервер вернет его 404:
header('Redirect abbb.404.nonexist');
<, которого точно не существуетисточник
Если вы хотите показать страницу 404 сервера по умолчанию, вы можете загрузить ее во фрейме следующим образом:
echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';
источник