Как обойти 404 и получить ответ 410 для конкретных URL?
Приветствую друзья? Есть задача на сайте, для определенных URL получить ответ 410, но таких страниц нет на сайте, и MODX REVO возвращает 404 страницу.
Какие есть варианты?
Плагины OnPageNotFound на проверку URL не работают, не получается обойти 404 настройку в MODX.
Делаю проверку на URL в плагине, если url совпадает, то делаю редирект на страницу 410. Но не получается,
Страницы нет, и кидает на 404 и все. Буду признателен за любые советы.
Какие есть варианты?
Плагины OnPageNotFound на проверку URL не работают, не получается обойти 404 настройку в MODX.
Делаю проверку на URL в плагине, если url совпадает, то делаю редирект на страницу 410. Но не получается,
Страницы нет, и кидает на 404 и все. Буду признателен за любые советы.
Комментарии: 13
Создайте ресурс который будет отобажаться при 410 ошибке. И в плагине на OnPageNotFound перенаправляйте пользователей на етот ресурс
Спасибо, но не работает это. Я тоже так подумал, но для MODX REVO несуществующий URL например /page это сразу кидает на 404 и все, на этом приехали. А мне надо этот URL отпhавить на 410 страницу, но я не могу обойти 404 страницу, и сам плагин на OnPageNotFound не работает, кидает на 404 страницу согласно настройкам в system
А редирект в плагине ты делаеш?
Да, но такое ощущение что до ридеректа как и до плагина с его OnPageNotFound дело не доходит когда срабатывает системная настройка 404
$requestedUrl = $modx->context->getOption('request_uri');
if ($requestedUrl === '/page') {
$modx->sendRedirect($modx->makeUrl(173), 'HTTP/1.1 410 Gone');
exit();
}
Банальный вопрос: А галочку в сис.событиях поставил на OnPageNotFound?
Не не, все активно, это понятно
у тебя $requestedUrl пустой. Пробуй так
$q_var = $modx->getOption('request_param_alias', null, 'q');
$requestedUrl = &$_REQUEST[$q_var];
ок Благодарю, сейчас попробую, пока не могу, все повисло, и сайт и vps :)) в плагине ошибка видно, накрутил блин
Чет я не понял.
410 код — это не редирект, это код ответа.
Если ты делаешь редирект, то минимальный пример это
а если мы 404 хотим показывать, то мы отдаем
А ты пытаешься сделать редирект и передать в него код 410.
Это не верно!
Тебе нужно в плагине сделать так:
410 код — это не редирект, это код ответа.
Если ты делаешь редирект, то минимальный пример это
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.newdomain.ru/newdir/newpage.htm");
exit();
как видишь, есть Location, но нет тела страницы (html кода считай)а если мы 404 хотим показывать, то мы отдаем
header("HTTP/1.1 404 Not Found");
и html код страницы. Браузер её покажет, просто будет код 404, который роботы и увидят.А ты пытаешься сделать редирект и передать в него код 410.
Это не верно!
Тебе нужно в плагине сделать так:
$modx->sendForward(123, 'HTTP/1.1 410 Gone');
где 123 — это id страницы, в тексте которой будет написано «Страницы нет, код 410».
sendRedirect сделает именно редирект на страницу
sendForward оставит текущий url, редиректа не будет, но вместо показа текущей страницы будет произведена «подмена» на указанную
sendForward оставит текущий url, редиректа не будет, но вместо показа текущей страницы будет произведена «подмена» на указанную
Ага, спасибо, сейчас попробую!
Я чуть заоффтоплю, пардоньте, вдруг ваш случай. Я встречал среди сеошников мысль что 410 редирект лучше 404 для навсегда удаленных страниц. Но представитель гугла в одном из видео сказал, что не стоит заморачиваться и Платон из яндекса отвечал, что робот одинаково реагирует на 4×× ошибки. Пруф от компетентного человека: t.me/devakatalk/2005
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.