Как обойти 404 и получить ответ 410 для конкретных URL?

Приветствую друзья? Есть задача на сайте, для определенных URL получить ответ 410, но таких страниц нет на сайте, и MODX REVO возвращает 404 страницу.

Какие есть варианты?
Плагины OnPageNotFound на проверку URL не работают, не получается обойти 404 настройку в MODX.
Делаю проверку на URL в плагине, если url совпадает, то делаю редирект на страницу 410. Но не получается,
Страницы нет, и кидает на 404 и все. Буду признателен за любые советы.
Роман
28 декабря 2023, 15:30
modx.pro
1 533
0

Комментарии: 13

Тодор
29 декабря 2023, 14:09
0
Создайте ресурс который будет отобажаться при 410 ошибке. И в плагине на OnPageNotFound перенаправляйте пользователей на етот ресурс
    Роман
    29 декабря 2023, 14:12
    0
    Спасибо, но не работает это. Я тоже так подумал, но для MODX REVO несуществующий URL например /page это сразу кидает на 404 и все, на этом приехали. А мне надо этот URL отпhавить на 410 страницу, но я не могу обойти 404 страницу, и сам плагин на OnPageNotFound не работает, кидает на 404 страницу согласно настройкам в system
      Тодор
      29 декабря 2023, 14:46
      0
      А редирект в плагине ты делаеш?
        Роман
        29 декабря 2023, 14:51
        0
        Да, но такое ощущение что до ридеректа как и до плагина с его OnPageNotFound дело не доходит когда срабатывает системная настройка 404

        $requestedUrl = $modx->context->getOption('request_uri');
        if ($requestedUrl === '/page') {
            $modx->sendRedirect($modx->makeUrl(173), 'HTTP/1.1 410 Gone');
            exit();
        }
          Тодор
          29 декабря 2023, 14:54
          0
          Банальный вопрос: А галочку в сис.событиях поставил на OnPageNotFound?
            Роман
            29 декабря 2023, 14:57
            0
            Не не, все активно, это понятно
            Тодор
            29 декабря 2023, 14:57
            0
            у тебя $requestedUrl пустой. Пробуй так
            $q_var = $modx->getOption('request_param_alias', null, 'q');
            $requestedUrl = &$_REQUEST[$q_var];
              Роман
              29 декабря 2023, 15:21
              0
              ок Благодарю, сейчас попробую, пока не могу, все повисло, и сайт и vps :)) в плагине ошибка видно, накрутил блин
        Наумов Алексей
        29 декабря 2023, 15:07
        0
        Чет я не понял.

        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».
          Наумов Алексей
          29 декабря 2023, 15:08
          0
          sendRedirect сделает именно редирект на страницу
          sendForward оставит текущий url, редиректа не будет, но вместо показа текущей страницы будет произведена «подмена» на указанную
            Роман
            29 декабря 2023, 15:22
            0
            Ага, спасибо, сейчас попробую!
            Павлик Мышкин
            31 декабря 2023, 18:01
            0
            Я чуть заоффтоплю, пардоньте, вдруг ваш случай. Я встречал среди сеошников мысль что 410 редирект лучше 404 для навсегда удаленных страниц. Но представитель гугла в одном из видео сказал, что не стоит заморачиваться и Платон из яндекса отвечал, что робот одинаково реагирует на 4×× ошибки. Пруф от компетентного человека: t.me/devakatalk/2005
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              13