if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Чому не хочеться ця робота? Я отримую порожню сторінку.
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Чому не хочеться ця робота? Я отримую порожню сторінку.
Відповіді:
Ваш код технічно правильний. Якщо ви подивитеся на заголовки цієї порожньої сторінки, ви побачите заголовок 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 використовується павуками та менеджерами завантажень, щоб визначити, чи існує файл.
(Google чи інші пошукові системи не індексують сторінку із заголовком 404)
Однак звичайні користувачі не дивляться на заголовки 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 на тому ж сервері. Спостерігач не зможе розрізнити існуючу сторінку повернення 404 PHP та неіснуючу сторінку.
Трохи коротша версія. Придушити дивне відлуння.
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;
}
ніколи не спрощуйте заяви ехо, і ніколи не забудьте крапку з двокрапкою, як вище, а також навіщо запускати субстр на сторінці, ми можемо просто запустити php_self
Ви робите це правильно, хоча це може використати певне очищення. Схоже, це було вирішено, тому поговоримо про практичні переваги застосування:
Старий наш веб-сайт, який має велику колекцію багатомовних технічних документів, виконував це всередині, якщо не умовно:
if (<no file found>){
die("NO FILE HERE");
}
Проблема (окрім неприємного повідомлення та поганого досвіду користувача) полягає в тому, що ми зазвичай використовуємо сканер посилань (у нашому випадку цілісність), щоб перевірити погані посилання та відсутні документи. Це означає, що ми отримували абсолютно правильну відповідь про помилку 200 без помилок, повідомляючи нам, що там був файл. Цілісність не знала, що ми очікуємо 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>';