Вместо 404 выдает 200 выводится скриптами

12
P1
На сайте с 21.03.2015
Offline
16
2196

Кто сталкивался или кто просто знает что нужно сделать что бы на сайте при запросе на не существующую выдавало вместо 200 ошибки 404.

Выводится 200 ошибка вместо 404 у меня на сайте скриптами, но так как я не шарю я не знаю как это изменить.

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

defined('_JEXEC') or die;

if (!isset($this->error)) {
$this->error = JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
$this->debug = false;
}
// Detect if 404 Error Page is present
$db = JFactory::getDBO();
$db->setQuery('SELECT id,state FROM #__content WHERE title = "404 Error Page"');
$article = $db->loadObject();
if(!empty($article->id) && $article->state == 1)
{
$app = JFactory::getApplication();
$app->redirect('index.php?option=com_content&view=article&id='.$article->id);
}

Сайт кстати gruzovozka.dp.ua

veleg
На сайте с 30.01.2011
Offline
142
#1

Ответ ниже более развернутый, поэтому подчищу, чтоб пространство не занимать ;)

Фигачу Телеграм-ботов ( https://teleg.run/veleg )
dma84
На сайте с 21.04.2009
Offline
168
#2

У вас идёт редирект на 404-ю, а этого не должно происходить.

Попробуйте такой код:


<?php
defined('_JEXEC') or die;

if($this->_error->get('code') == '404')
{
if(PHP_SAPI == 'cgi' || PHP_SAPI == 'cgi-fcgi')
header('Status: 404 Not Found');
else
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
echo file_get_contents(JURI::root().'/404');
exit;
}

В системе нужно создать страницу с алиасом 404 (можно через скрытое меню), работает на версии 2.5 и выше, более умного я ничего в своё время не нашёл, да и этого кода достаточно.

P1
На сайте с 21.03.2015
Offline
16
#3

Извините, но я походу некорректно описал свою проблему... Дело в том что при запросе несуществующей страницы выводится 404 ошибка для пользователя нормально, а вот для поисковых роботов ошибка 200 или же 303. Как это победить я понятия не имею, кто сталкивался подскажите пожалуйста.

LEOnidUKG
На сайте с 25.11.2006
Offline
1678
#4

нету у вас для пользователей 404 ошибки.

HTTP/1.1 303 SEE OTHER

SERVER: NGINX

DATE: WED, 07 DEC 2016 14:43:02 GMT

CONTENT-TYPE: TEXT/HTML; CHARSET=UTF-8

CONNECTION: KEEP-ALIVE

SET-COOKIE: CCD58A3F3E165029DF28A24F6FF6CFF1=1FV5ANT27OKABS02DMATN5VK76; PATH=/; HTTPONLY

LOCATION: HTTP://GRUZOVOZKA.DP.UA/INDEX.PHP?OPTION=COM_CONTENT&VIEW=ARTICLE&ID=67

X-PAGE-SPEED: ON

CACHE-CONTROL: MAX-AGE=0, NO-CACHE

HTTP/1.1 200 OK

SERVER: NGINX

DATE: WED, 07 DEC 2016 14:43:02 GMT

CONTENT-TYPE: TEXT/HTML; CHARSET=UTF-8

CONNECTION: KEEP-ALIVE

P3P: CP="NOI ADM DEV PSAI COM NAV OUR OTRO STP IND DEM"

PRAGMA: NO-CACHE

SET-COOKIE: CCD58A3F3E165029DF28A24F6FF6CFF1=FIKNCHRSEJ2AKVED1IS4UQFUB5; PATH=/; HTTPONLY

X-PAGE-SPEED: ON

CACHE-CONTROL: MAX-AGE=0, NO-CACHE, NO-STORE, MUST-REVALIDATE, POST-CHECK=0, PRE-CHECK=0

У вас редирект на 200 ОК. А должно быть 404

Вам нужно отдавать заголовок:

header('HTTP/1.1 404 Not Found');

header('Status: 404 Not Found');

А не просто текст 404 ошибка.

✅ Трастовых площадок под размещение статей и ссылок. Опыт 15 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Новый аналог AllSubbmitter (заполнение форм) https://getmanylinks.ru/getmanysubmits.html (Бесплатное демо)
P1
На сайте с 21.03.2015
Offline
16
#5
LEOnidUKG:
нету у вас для пользователей 404 ошибки.

HTTP/1.1 303 SEE OTHER
SERVER: NGINX
DATE: WED, 07 DEC 2016 14:43:02 GMT
CONTENT-TYPE: TEXT/HTML; CHARSET=UTF-8
CONNECTION: KEEP-ALIVE
SET-COOKIE: CCD58A3F3E165029DF28A24F6FF6CFF1=1FV5ANT27OKABS02DMATN5VK76; PATH=/; HTTPONLY
LOCATION: HTTP://GRUZOVOZKA.DP.UA/INDEX.PHP?OPTION=COM_CONTENT&VIEW=ARTICLE&ID=67
X-PAGE-SPEED: ON
CACHE-CONTROL: MAX-AGE=0, NO-CACHE

HTTP/1.1 200 OK
SERVER: NGINX
DATE: WED, 07 DEC 2016 14:43:02 GMT
CONTENT-TYPE: TEXT/HTML; CHARSET=UTF-8
CONNECTION: KEEP-ALIVE
P3P: CP="NOI ADM DEV PSAI COM NAV OUR OTRO STP IND DEM"
PRAGMA: NO-CACHE
SET-COOKIE: CCD58A3F3E165029DF28A24F6FF6CFF1=FIKNCHRSEJ2AKVED1IS4UQFUB5; PATH=/; HTTPONLY
X-PAGE-SPEED: ON
CACHE-CONTROL: MAX-AGE=0, NO-CACHE, NO-STORE, MUST-REVALIDATE, POST-CHECK=0, PRE-CHECK=0

У вас редирект на 200 ОК. А должно быть 404

Вам нужно отдавать заголовок:

header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');

А не просто текст 404 ошибка.

А можете поконкретней, что нужно сделать, бо я не силен в этом деле ( Где эти настройки менять ?

header('HTTP/1.1 404 Not Found');

header('Status: 404 Not Found');

LEOnidUKG
На сайте с 25.11.2006
Offline
1678
#6

Это надо в коде прописать перед выдачей текст о 404 ошибке.

Это уже готовые заголовки.

dma84
На сайте с 21.04.2009
Offline
168
#7
p4o1:
А можете поконкретней, что нужно сделать, бо я не силен в этом деле ( Где эти настройки менять ?
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');

Я вам написал решение, что вам ещё нужно?

S
На сайте с 30.09.2016
Offline
469
#8
p4o1:
А можете поконкретней, что нужно сделать

Вам чуть выше dma84 довольно конкретно написал. Единственно, что ещё можно добавить - по адресу /404 положить html-файл с красивой страницей ошибки. Что конкретно Вам непонятно в такой реализации?

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
dma84
На сайте с 21.04.2009
Offline
168
#9
Sitealert:
Вам чуть выше dma84 довольно конкретно написал. Единственно, что ещё можно добавить - по адресу /404 положить html-файл с красивой страницей ошибки. Что конкретно Вам непонятно в такой реализации?

Можно всю вёрстку страницы ошибки прямо в error.php положить, тогда file_get_contents вообще не нужен.


<?php
defined('_JEXEC') or die;

if($this->_error->get('code') == '404')
{
if(PHP_SAPI == 'cgi' || PHP_SAPI == 'cgi-fcgi')
header('Status: 404 Not Found');
else
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
}
?>
<html>
...
P1
На сайте с 21.03.2015
Offline
16
#10

Всем огромное спасибо, сделал так как советовал dma84

<?php

defined('_JEXEC') or die;

if($this->_error->get('code') == '404')
{
if(PHP_SAPI == 'cgi' || PHP_SAPI == 'cgi-fcgi')
header('Status: 404 Not Found');
else
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
echo file_get_contents(JURI::root().'/404');
exit;
}

только вот почему то увеличилось время ответа сервера с 120мс до 240 при запросе к несуществующей странице, да и в PageSpeed Insights скорость была 84 стала 74.

Может кто что подсказать ?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий