Cейчас перенаправляет при вводе не существующей страницы на главную ,а не на 404,мне надо чтоб пользователь видел 404 ,как исправить?

152
02 июня 2019, 21:20
# redirect all requests to index.php loader
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

ПРОБОВАЛ ВОТ ТАК ТОЖЕ НЕ РАБОТАЕТ

# redirect all requests to index.php loader
    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
      ErrorDocument 404 /err404.html
    </IfModule> 
Answer 1

Браузер и сервер общаются по протоколу HTTP или HTTPS. При вводе адреса в адресную строку браузера или при отправке формы происходят запросы определённого формата. В ответ на этот запрос сервер отравляет ответ определённого формата. Этот ответ включает в себя: версию протокола, результат запроса, заголовки и тело ответа. Код 404 - это один из множества результатов запроса. К примеру 403 (ошибка доступа), 500 (критическая ошибка сервера). По умолчанию сервер отправляет результат 200 (успешное выполнение). Страница же передаётся в теле ответа.

Т.е. для того чтобы получить собственную страницу с ошибкой 404. Вам надо отослать собственную страницу с результатом 404. Длю установки результата в php есть функция http_response_code.

Пример:

<?php 
$requestUri = $_SERVER['REQUEST_URI'];
// Простая адресация
if ($requestUri == '/') {
    drawMainPage();
} elseif ($requestUri == '/second') {
    drawSecondPage();
} else {
    drawNoFoundPage();
}
// Главная страница
function drawMainPage() {
    echo '<h1>My site</h1><hr><p>Main page</p>';
}
// Вторая страница
function drawSecondPage() {
    echo '<h1>My site</h1><hr><p>Second page</p>';
}
// Ошибка 404
function drawNoFoundPage() {
    http_response_code(404);
    echo '<h1>My site</h1><hr><p>Page not found</p>';
}

Устанавливать результат (функция http_response_code) как и вывод заголовков (функция header) необходимо делать раньше чем вывод тела ответа.

Answer 2

Странно, что никто это ещё не посоветовал. В .htaccess (за пределами IfModule):

ErrorDocument 404 /err404.html

И так по строчке для всех страниц и ошибок, которые нужны.

READ ALSO
Получение динамических данных Network(chrome) в коде

Получение динамических данных Network(chrome) в коде

значит имеем мы страничку, на ней плеер, чатпринцип работы, отправляет отрывки видео (длительностью в 2 секунды)(media

161
Вызов функций для элементов массива

Вызов функций для элементов массива

Сценарий следующий: пользователь отмечает "чекбоксами" варианты в соответствующем мета-поле в админпанели и на выходе (в зависимости от выбранного...

166
как объявить переменную и присвоить ей значение

как объявить переменную и присвоить ей значение

Есть форма c несколькими строками

206
Как создать и отправить уведомление по дате и времени?

Как создать и отправить уведомление по дате и времени?

Админка(PHP+MySql) + кроссплатформенное приложение(JavaScript) для android и iphone

139