понедельник, 28 мая 2012 г.

Убрать ссылки типа /index.php?route=common/home

В файле
system/library/response.php

в методе output(), в самом начале добавить строку:
if (!defined('HTTP_CATALOG')) $this->output = str_replace('index.php?route=common/home', '', $this->output);

27 комментариев:

  1. почему-то не работает, пробовал по всякому вставлять...

    у меня там вот так изначально:
    public function setOutput($output) {
    $this->output = $output;
    }

    ОтветитьУдалить
    Ответы
    1. Совет совершенно не правильный, так как после использования link перестают работать get параметры и модули использующие передачу параметров например на главной (есть и такие) получат ссылки вида

      http://site/&page=1

      Что приведет к ошибке так как надо через "?"

      Удалить
  2. А блин, не на ту часть кода смотрел... теперь заработало.
    Пофлудил тут немного :)

    ОтветитьУдалить
  3. ничего=)
    получается в нужном месте будет
    public function output() {
    if (!defined('HTTP_CATALOG')) $this->output = str_replace('index.php?route=common/home', '', $this->output);
    if ($this->output) {
    if ($this->level) {
    $ouput = $this->compress($this->output, $this->level);
    } else {
    $ouput = $this->output;
    }

    ОтветитьУдалить
  4. Приветствую!
    если на сайт пришли по урлу с www.site.ru , то при клике на "Главная" или на "лого" то бросает на главную БЕЗ "WWW", просто site.ru,
    Было бы отлично чтоб и это лечилось!

    ОтветитьУдалить
    Ответы
    1. я думаю, это уже зеркалами лечится, а не настройкой опенкарта.
      в .htaccess пропишите
      Options +FollowSymLinks
      RewriteEngine On
      RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
      RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
      и сайт будет только с www.

      Удалить
  5. Скажите пожалуйста, если вставить этот код, то будет ЧПУ на всех страницах? я вроде сделал как у вас написано, создал новый вид товара, но вид ссылки остался прежним

    ОтветитьУдалить
    Ответы
    1. нет. то, что описано в этом посте, уберет лишь одну конкретную ссылку - дубль главной страницы. как настроить ЧПУ, написано тут - http://seo-cheats.blogspot.com/2012/09/opencart.html

      Удалить
  6. Правильное решение

    /system/library/url.php

    Находим $url .= 'index.php?route=' . $route;

    и после него вот этот код вставляем:

    if ($args) {
    if($route == 'common/home') {
    if($connection == 'NONSSL') {
    $url = HTTP_SERVER.str_replace('&', '&', '?' . ltrim($args, '&'));
    return $url;
    } else {
    $url = HTTPS_SERVER.str_replace('&', '&', '?' . ltrim($args, '&'));
    return $url;
    }

    } else {
    $url .= str_replace('&', '&', '&' . ltrim($args, '&'));

    }
    } else {
    if($route == 'common/home') {
    if($connection == 'NONSSL') { return HTTP_SERVER; }
    else { return HTTPS_SERVER; }
    }
    }


    return $this->rewrite($url);

    ОтветитьУдалить
  7. Мне помогло немного другое... в этом же "url.php" (system/library/url.php):
    после строчки:
    if ($args) { $url .= str_replace('&', '&', '&' . ltrim($args, '&')); }

    вставляем:
    else { if($route == 'common/home') { if($connection == 'NONSSL') { return HTTP_SERVER; } else { return HTTPS_SERVER; } } }

    ОтветитьУдалить
    Ответы
    1. Отлично, мне тоже этот метод помог!

      Удалить
    2. Мне тоже помог. Спасибо!

      Удалить
    3. Благодарю. Помогло.
      Чего только не пробовал
      и htacess и response и многое другое

      Удалить
    4. огромнейшая благодарность!!!:)

      Удалить
  8. Этот комментарий был удален автором.

    ОтветитьУдалить
  9. На osstore 1.5.5.1.1 заработал метод Maxa
    Правильное решение

    /system/library/url.php

    Находим $url .= 'index.php?route=' . $route;

    и после него вот этот код вставляем:

    if ($args) {
    if($route == 'common/home') {
    if($connection == 'NONSSL') {
    $url = HTTP_SERVER.str_replace('&', '&', '?' . ltrim($args, '&'));
    return $url;
    } else {
    $url = HTTPS_SERVER.str_replace('&', '&', '?' . ltrim($args, '&'));
    return $url;
    }

    } else {
    $url .= str_replace('&', '&', '&' . ltrim($args, '&'));

    }
    } else {
    if($route == 'common/home') {
    if($connection == 'NONSSL') { return HTTP_SERVER; }
    else { return HTTPS_SERVER; }
    }
    }


    return $this->rewrite($url);

    ОтветитьУдалить
    Ответы
    1. Это единственное правильное решение для 1.5.5.2 для тех кто работает с модулем упрощенного заказа SImple. Остальные способы не работают.

      Удалить
  10. Этот комментарий был удален автором.

    ОтветитьУдалить
  11. Всем добрый день!
    Ребят у меня ни один из методов не работают...если ввести адрес сайта с /index.php?route=common/home то все равно сайт открывается(( У меня версия 1.5.4.1. Я не исключаю что делаю что то нетак, хотя с тем что написано в комментах сверила 20 раз.

    ОтветитьУдалить
    Ответы
    1. в .htacess есть строка
      RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
      ?
      файл имеет именно вид .htacess ?
      ЧПУ включено?
      ссылка на логотип тоже имеет вид /index.php?route=common/home ?

      Удалить
  12. А вот у меня просто перестали работать варианты. Сначала все было гуд. С сайтом работы не проводились. С чем может быть связано? Подскажите, пожалуйста:)

    ОтветитьУдалить
    Ответы
    1. Варианты того, как убрать ссылку вида: /index.php?route=common/home. Стоит OpenCart 1.5.6

      Удалить
    2. адрес сайта. можно в личку. почта в профиле

      Удалить
  13. system\library\response.php
    в функцию public function output() { с самого начала дописываем:

    if (!defined('HTTP_CATALOG')) $this->output = str_replace('index.php?route=common/home', '', $this->output);


    Будет выглядеть вот так.

    public function output() {
    if (!defined(‘HTTP_CATALOG’)) $this->output = str_replace(‘index.php?route=common/home’, », $this->output);
    if ($this->output) {
    if ($this->level) {
    $output = $this->compress($this->output, $this->level);
    } else {
    $output = $this->output;
    }
    if (!headers_sent()) {
    foreach ($this->headers as $header) {
    header($header, true);
    }
    }
    echo $output;
    }

    ОтветитьУдалить