Jump to content
Sign in to follow this  
7up

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

Recommended Posts

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

 

В контроллере ловлю из ЮРЛ свою переменную, которую добавляю к строке &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 и т.д.  могу получить гору дублей и низкий рейтинг страницы?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

 

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

 

 

 

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

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

Share this post


Link to post
Share on other sites

 

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

 

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

Если данные не предавались, то 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, но это уже отдельная тема для разговора.

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.