Перейти к содержанию
7up

Как и где выдавать 404 при необходимости?

Рекомендуемые сообщения

Подскажите знающие,

 

В контроллере ловлю из ЮРЛ свою переменную, которую добавляю к строке &myvar=hello

Если она соответствует условия то все ок, выполняются действия, если нет то редирект на 404.

 

Пробовал и так:

 

if(мое условие) { $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found'); }

 

и так:

 
if(мое условие) { $this->redirect('/error/not_found'); }
 
Для пользователя все ок, перекидывает на "страница не найдена", но а для ботов то остается 202.
 
Вот собственно и вопрос: как и где "правильно" выдавать ботам 404 когда мне это нужно.
 
P.S.
Я правильно понимаю SEO, что не делая 404 при вариантах &myvar=hello1, &myvar=hello2, &myvar=hello3 и т.д.  могу получить гору дублей и низкий рейтинг страницы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В OpenCart не предусмотрены коды ошибок(

Да, вы правильно понимаете. Вам нужно в headers ответа от сервера добавить код ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хммм, всегда думал, что страница выводится, а код ошибки сервер не присылает. Поэтому в .htaccess или конфигах nginx прописывал пути к кастомным страницам ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибки то предусмотрены, но суть вопроса в другом, описана выше "как выводить принудительно" из контроллера 404 когда это необходимо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно что никто не знает ответа. 

В общем установкой SeoPro часть проблем удалось решить, но все же тема еще актуальна :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не понимаю вопроса

если вы умеет делать это

 $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found'); 

То что еще надо?

 

 

if(мое условие) { $this->redirect('/error/not_found'); }
 
Для пользователя все ок, перекидывает на "страница не найдена", но а для ботов то остается 202.

А чем пользователь отличается от бота?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не понимаю вопроса

если вы умеет делать это

 $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found'); 

То что еще надо?

 

А чем пользователь отличается от бота?

 

Это не работает, по крайней мере в контроллере продукта.

 

 

 

А чем пользователь отличается от бота?

Тем, что пользователь не видит хедеров и не замечает редирект, а бот то ловит первый выданный хедер, до редиректа, а он HTTP/1.1 200 OK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Тем, что пользователь не видит хедеров и не замечает редирект, а бот то ловит первый выданный хедер, до редиректа, а он HTTP/1.1 200 OK

Не совсем так...

 

Заголовки отправляются  на момент передачи данных

Если данные не предавались, то http/1.1 перезапишутся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем так...

 

Заголовки отправляются  на момент передачи данных

Если данные не предавались, то http/1.1 перезапишутся.

Спасибо за ответы. Да именно так я и думал, но дело в том, что даже принудительно вставляя ее, в самом начале кода контроллера продукта:

 
public function index() { 
$this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
не дает 404й результат, все по прежнему HTTP/1.1 200 OK
проверял разными сервисами, в т.ч. телнетом :)
 
и вот не пойму почему он не отрабатывает. Потому и по интересовался у опытных программеров, где в коде генерить хедер по необходимости. Судя из постов Выше понимаю, что достаточно одной строки, осталось разобраться почему она не отрабатывает...
 
P.S.
Возможно еще грабли с Seo Pro, потому как после его использования он дико портит мне мои ЮРЛы, в которых я использую &myvariable=myparametr, но это уже отдельная тема для разговора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эмммммм  :oops:  :oops:  :oops:  Всем спасибо за поддержку, похоже разобрался почему был HTTP/1.1 200 OK

 

Собственно причина, из за которой хотел сделать 404 и редирект выдавала ошибку PHP вида "Notice: Undefined... траливали" которая и генерила 200й хедер сколько я не пытался выводить его из кода, убрав PHP Notice стал генериться как положено строкой указанной выше.  :ugeek: 

 

Тему можно закрывать.

 

Полез в тему про Seo Pro в надежде на помощь в вопросах, почему он ломает мои пасочки юрлы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.