Как изменить url магазина opencart

В этом уроке мы рассмотрим детали пользовательских SEO-дружественных URL. Это важный аспект, на который следует обратить внимание при разработке

В этом уроке мы рассмотрим детали пользовательских SEO-дружественных URL. Это важный аспект, на который следует обратить внимание при разработке пользовательских модулей, и он также влияет на общий рейтинг в поисковых системах.

Мы будем использовать последнюю версию OpenCart, поэтому убедитесь, что вы установили ее, чтобы следовать коду.

Что мы собираемся сделать – в двух словах

Вот краткое изложение шагов, которые нам необходимо предпринять для создания пользовательских URL-адресов в OpenCart:

  • Во-первых, нам нужно понять, как это работает в ядре.
  • Мы пройдем через изменения, необходимые в основных файлах.
  • Мы кратко рассмотрим запросы SQL, чтобы вставить наши пользовательские сопоставления URL.
  • Мы рассмотрим, как использовать встроенные функции перезаписи.

Итак, это быстрый взгляд на то, что будет дальше. Давайте перейдем к первой теме.

Отображения URL в базе данных

Прежде всего, важно понять, как работают URL-адреса SEO в ядре OpenCart.

Идите дальше и изучите записи в таблице MySQL «url_alias», используя phpMyAdmin или что-то подобное. Вы увидите такие отображения.

1

2

3

4

product_id=48 ipod-classic

category_id=20 desktops

manufacturer_id=8 apple

information_id=6 delivery

Здесь нужно отметить два важных столбца. Первый столбец запроса содержит фактический путь, а второй – ключевое слово , в котором хранится псевдоним SEO для этого URL.

Как видите, существуют сопоставления для различных объектов, таких как продукт, категория, информация и производитель. Всякий раз, когда какая-либо сущность сохраняется в серверной части OpenCart, в эту таблицу добавляется связанная запись.

Во внешнем интерфейсе, когда пользователь обращается к URL-адресу, OpenCart находит соответствующее отображение из таблицы «url_alias». Таким образом, фактическая сущность сопоставляется с SEO-дружественным URL.

Давайте откроем файл catalog/controller/common/seo_url.php и рассмотрим следующий фрагмент из метода index .

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

public function index() {

    // Add rewrite to url class

    if ($this->config->get(‘config_seo_url’)) {

        $this->url->addRewrite($this);

    }

    // Decode URL

    if (isset($this->request->get[‘_route_’])) {

        $parts = explode(‘/’, $this->request->get[‘_route_’]);

        // remove any empty arrays from trailing

        if (utf8_strlen(end($parts)) == 0) {

            array_pop($parts);

        }

        foreach ($parts as $part) {

            $query = $this->db->query(“SELECT * FROM ” . DB_PREFIX . “url_alias WHERE keyword = ‘” . $this->db->escape($part) . “‘”);

            if ($query->num_rows) {

                $url = explode(‘=’, $query->row[‘query’]);

                if ($url[0] == ‘product_id’) {

                    $this->request->get[‘product_id’] = $url[1];

                }

                if ($url[0] == ‘category_id’) {

                    if (!isset($this->request->get[‘path’])) {

                        $this->request->get[‘path’] = $url[1];

                    } else {

                        $this->request->get[‘path’] .= ‘_’ .

                    }

                }

                if ($url[0] == ‘manufacturer_id’) {

                    $this->request->get[‘manufacturer_id’] = $url[1];

                }

                if ($url[0] == ‘information_id’) {

                    $this->request->get[‘information_id’] = $url[1];

                }

                if ($query->row[‘query’] && $url[0] != ‘information_id’ && $url[0] != ‘manufacturer_id’ && $url[0] != ‘category_id’ && $url[0] != ‘product_id’) {

                    $this->request->get[‘route’] = $query->row[‘query’];

                }

            } else {

                $this->request->get[‘route’] = ‘error/not_found’;

                break;

            }

        }

        if (!isset($this->request->get[‘route’])) {

            if (isset($this->request->get[‘product_id’])) {

                $this->request->get[‘route’] = ‘product/product’;

            } elseif (isset($this->request->get[‘path’])) {

                $this->request->get[‘route’] = ‘product/category’;

            } elseif (isset($this->request->get[‘manufacturer_id’])) {

                $this->request->get[‘route’] = ‘product/manufacturer/info’;

            } elseif (isset($this->request->get[‘information_id’])) {

                $this->request->get[‘route’] = ‘information/information’;

            }

        }

        if (isset($this->request->get[‘route’])) {

            return new Action($this->request->get[‘route’]);

        }

    }

}

Как вы можете видеть, мы выбираем соответствующую запись из таблицы “url_alias”. После этого параметр запроса анализируется и возвращается соответствующий внутренний путь.

Так вот, как это работает в ядре. К сожалению, настройка работает только для основных URL-адресов – для пользовательских URL-адресов нам необходимо изменить основной код. Это рецепт нашего следующего раздела.

Основные изменения файла

Откройте файл catalog/controller/common/seo_url.php и замените метод rewrite следующим.

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

public function rewrite($link) {

    $url_info = parse_url(str_replace(‘&’, ‘&’, $link));

    $url = ”;

    $data = array();

    parse_str($url_info[‘query’], $data);

    foreach ($data as $key => $value) {

        if (isset($data[‘route’])) {

            if (($data[‘route’] == ‘product/product’ && $key == ‘product_id’) || (($data[‘route’] == ‘product/manufacturer/info’ || $data[‘route’] == ‘product/product’) && $key == ‘manufacturer_id’) || ($data[‘route’] == ‘information/information’ && $key == ‘information_id’)) {

                $query = $this->db->query(“SELECT * FROM ” . DB_PREFIX . “url_alias WHERE `query` = ‘” . $this->db->escape($key . ‘=’ . (int)$value) . “‘”);

                if ($query->num_rows && $query->row[‘keyword’]) {

                    $url .= ‘/’ .

                    unset($data[$key]);

                }

            } elseif ($key == ‘path’) {

                $categories = explode(‘_’, $value);

                foreach ($categories as $category) {

                    $query = $this->db->query(“SELECT * FROM ” . DB_PREFIX . “url_alias WHERE `query` = ‘category_id=” . (int)$category . “‘”);

                    if ($query->num_rows && $query->row[‘keyword’]) {

                        $url .= ‘/’ .

                    } else {

                        $url = ”;

                        break;

                    }

                }

                unset($data[$key]);

            // OUR CUSTOM CODE

            } else {

                $query = $this->db->query(“SELECT * FROM ” . DB_PREFIX . “url_alias WHERE `query` = ‘” . $data[‘route’] . “‘”);

                if ($query->num_rows && $query->row[‘keyword’]) {

                    $url .= ‘/’ .

                } else {

                    $url = ”;

                    break;

                }

            }

            // OUR CUSTOM CODE

        }

    }

    if ($url) {

        unset($data[‘route’]);

            $query = ”;

        if ($data) {

            foreach ($data as $key => $value) {

                $query .= ‘&’ .

            }

            if ($query) {

                $query = ‘?’

            }

        }

        return $url_info[‘scheme’] .

    } else {

        return $link;

    }

}

Метод rewrite используется для преобразования внутреннего URL-адреса в оптимизированный для SEO. Но он делает это только для внутренних URL. Следовательно, нам нужно добавить собственный код, чтобы он работал и для наших пользовательских модулей. В наших изменениях кода мы предоставили последний случай, который загружает отображение для нашего пользовательского модуля. Мы еще не добавили наше пользовательское сопоставление, поэтому давайте сделаем это в следующем разделе.

Хотя мы изменили файл ядра напрямую, это просто ради простоты. Вы должны использовать OCMOD, чтобы изменить файл ядра без его фактического изменения.

Добавить записи MySQL

В этом разделе мы добавим SEO-сопоставление URL для нашего пользовательского модуля. Опять же, это простой SQL для примера – вы можете добиться этого с помощью скриптов установки модуля.

1

INSERT INTO `url_alias` (`query`, `keyword`) VALUES (‘custom/custom’, ‘custom-rewrite’);

Иди вперед и запусти его в своей базе данных OpenCart.

В следующем и последнем разделе мы увидим, как использовать вспомогательную функцию для создания SEO-дружественных ссылок.

Как это устроено

Создайте новый файл catalog/controller/custom/custom.php со следующим содержимым.

1

2

3

4

5

6

7

<?php

class ControllerCustomCustom extends Controller {

    function index() {

        $data[‘customlink’] = $this->url->link(‘custom/custom’);

        $this->response->setOutput(‘<a href=”‘.$data[‘customlink’].’”>Custom URL Rewrite Link</a>’);

    }

}

Теперь в интерфейсе откройте URL-адрес http://www.yourstore.com/index.php?route=custom/custom .

Да, это простой белый экран только с одной ссылкой, и это то, что мы намеревались. Здесь важно отметить URL этой ссылки – теперь она оптимизирована для SEO! Нажмите на него, и он загрузит ту же страницу, так как мы добавили отображение для этого в таблицу “url_alias”.

Итак, вот и вся концепция, продемонстрированная простым способом. Вы можете расширить его и создать модель для вставки SEO-дружественных ссылок для вашего пользовательского модуля.

Вывод

Сегодня мы обсудили важную тему в OpenCart – настраиваемые оптимизированные для SEO URL-адреса. Мы использовали очень простой подход, чтобы объяснить это, и я надеюсь, что это было полезно для вас.

Если вы ищете дополнительные инструменты OpenCart, утилиты, расширения и т. Д., Которые вы можете использовать в своих собственных проектах или для собственного образования, не забудьте посмотреть, что у нас есть на рынке .

Не стесняйтесь оставлять свои запросы и предложения, используя канал ниже.

Повысить доверие к вашему интернет-магазину поможет установка SSL. OpenCart очень популярная система управления онлайн торговлей, из этой статьи вы узнаете как все настроить.

SSL означает Secure Sockets Layer и является стандартной технологией безопасности. Она используется для шифрования соединения между браузером и сервером хостинга, на котором размещен ваш веб-сайт. Веб-сайт, имеющий SSL-сертификат, чаще всего распознается URL-адресом https и защищенным замком в клиентском браузере.

Наличие SSL-сертификата для вашего сайта позволит повысить доверие ваших посетителей. Прежде всего, это уверенность в том, что их личная информация и данные кредитной карты в безопасности. Это поможет вам повысить коэффициент конверсии в вашем магазине.

ДИСКЛЕЙМЕР

Напомню, что я описываю способы и решения, которыми пользуюсь лично, это не значит, что они являются единственными и самыми верными. Конечный результат будет зависеть от многих факторов и может отличаться от моего описания.
 Установка OpenCart 2 для протокола https: // без наличия действительного сертификата SSL может повлиять на доступность вашего веб-сайта или привести к предупреждениям о безопасности. Если вам требуется хостинг с бесплатным сертификатом SSL для защиты вашего магазина, вы можете просмотреть доступный хостинг для OpenCart 2. 

Чтобы установить SSL на OpenCart 2, вам необходимо:
  • Шаг 1. Установить URL-адрес HTTPS в файлах OpenCart 2 config.php
  • Шаг 2. Включить SSL через Панель управления OpenCart 2
  • Шаг 3. Перенести OpenCart 2 полностью на HTTPS

Шаг 1

Установка URL-адрес HTTPS в файлах OpenCart 2 config.php

Прежде чем включить поддержку SSL в панели управления администратора OpenCart 2, вам нужно будет отредактировать два файла конфигурации вашего OpenCart’a. Оба файла называются config.php. Один из них находится в корневом каталоге вашего сайта, второй в папке admin:
[opencart]/config.php
[opencart]/admin/config.php

Вы можете отредактировать эти файлы через файловый менеджер хостинга, например cPanel. Также можно скачать их на локальный компьютер через FTP и повторно загрузить после изменений.

В любом случае, вам нужно будет найти следующий раздел в обоих ваших файлах:
// HTTPS
define('HTTPS_SERVER', 'http://website.com/');

Измените строку, чтобы включить https вместо http:
// HTTPS
define('HTTPS_SERVER', 'https://website.com/');

Когда вы настроили правильный URL-адрес https для вашего магазина на OpenCart 2, сохраните файлы и загрузите их обратно на свою установку OpenCart 2. Это в случае, если вы выполняете изменения локально на своем компьютере.  Не забудьте изменить как основной файл config.php, так и config.php в папке администратора. 

Шаг 2

Включение SSL через Панель управления OpenCart 2

Теперь вам нужно активировать поддержку SSL через панель управления администратора OpenCart 2. Вы можете легко сделать это, войдя в свою панель администратора OpenCart 2 и открыв меню настроек.

В списке магазинов нажмите на значок редактирования рядом с именем вашего магазина и перейдите на вкладку «Сервер» (Настройки сервера или Server – зависит от версии перевода).

В раздере «Безопасность» на вкладке «Сервер» должна быть опция «Использовать SSL». Нажмите кнопку «Да» и сохраните настройки с помощью значка сохранения в правом верхнем углу экрана.
Теперь страница оплаты, регистрации и другие страницы, на которые передается конфиденциальная информация, будут доступны только через HTTPS.

Шаг 3

Перенос OpenCart 2 полностью на HTTPS

Если вы хотите, чтобы ваш магазин был доступен только через HTTPS, вы можете вернуться к шагу 1 в этом руководстве. В этом случае нужно отредактировать не только URL HTTPS, но и HTTP.
Для этого откройте еще раз файл конфигурации OpenCart 2 и исправте следующую строку:

// HTTP
define('HTTP_SERVER', 'http://yourdomain.com/');

на

// HTTP
define('HTTP_SERVER', 'https://yourdomain.com/');

Таким образом вы настроите свой магазин на использование HTTPS для всех страниц и для панели администратора.
В следующей статье я планирую описать как проходит установка SSL(HTTPS) для WordPress.
Спасибо, что дочитали до конца, успеха в делах!

  1. Уважаемые господа,

    У нас после установки Opencart на ранее размещенный в Rucenter домен mydomen.ru в настройках магазина указан URL mydomen.nichost.ru

    Как можно изменить URL на mydomen.ru ?

    Так как при добавлении товара URL страницы выглядит как mydomen.nichost.ru/tovar и выводится с кодом 404, да и вообще этот nichost не нужен.

    На хостинге mydomen.ru и mydomen.nichost.ru указаны как синонимы.

    Я понимаю, что mydomen.nichost.ru вроде как основной домен, т.к. на сервере папка имеет вид mydomen.nichost.ru

    Знаком только с работой cpanel на других хостингах, когда корнем сайта является папка public_html , а в rucenter файлы сайта расположены в папке mydomen.nichost.ru , да еще не просто в ней, а во вложенной папке docs. Получается docs — это и есть корневая папка? Ведь домен работал (отображался) и «своей» папки mydomen у него не было.

    Техподдержка хостинга пишет, что изменять url надо в настройках магазина.

    Может надо было устанавливать Opencart в другую папку, но в какую? Техподдержка говорит, что сам домен установлен корректно, да он и работал до установки opencart.

    Что подскажите?

    Заранее благодарен

  2. Ален,
    1. Попытался изменить config.php и admin/config.php
    Ничего хорошего из этого не вышло….
    После установки opencart на домене Rucenter все файлы opencart размещены в папке mydomen.nichost.ru/docs
    Отдельной папки (типа public_html или mydomen.ru) у них нет — все зачем-то через nichost
    Техподдержка отправляет к разработчикам opencart и пишет:
    «Так как доменное имя mydomen.ru является синонимом mydomen.nichost.ru, то корневой директорией для них обоих будет ~/mydomen.nichost.ru/docs/»
    Я изменил пути в config.php и admin/config.php с mydomen.nichost.ru/docs/ на mydomen.ru — все равно не идет.
    Если же оставлять путь mydomen.nichost.ru/docs/ — то страницы сайта, естественно, имеют адрес mydomen.nichost.ru Что посоветуете?

    2. В админке в Система-Настройки прописан url mydomen.nichost.ru Как он туда прописывается? Может в config надо изменить путь не во всех строках?

    3. Также непонятно: Меняю имя файла .htaccess.txt на .htaccess (через ftp) — сайт становится недоступным. А это почему?

  3. ведь написанопочему бы так не сделать? а?

  4. Так все и было:
    — сначала был установлен opencart: в папку mydomen.nichost.ru/docs (другой папки нет и техподдержка говорит, что nichost — это синоним)
    — в конфигах сразу прописался путь mydomen.nichost.ru — админка и сайт при этом имеют адреса тоже mydomen.nichost.ru (чего не хочется). Я понял по предыдущему совету, что указав в конфигах путь mydomen.ru (без nichost) и путь у файлам найдется (так как синонимы) и адреса страниц будут нужными (mydomen.ru), но после изменения в конфигах mydomen.nichost.ru на mydomen.ru сайт вообще перестал был доступен…. Также непонятно, почему переименование .htaccess.txt на .htaccess также приводит к недоступности сайта…. Может еще где-нибудь надо пути менять? Или менять не во всех строках конфигов, а только в тех, которые отвечают за формирование url страниц?

  5. // HTTP
    define('HTTP_SERVER', 'http://chaikoff.nichost.ru/');
    
    // HTTPS
    define('HTTPS_SERVER', 'http://chaikoff.nichost.ru/');

    вот тут должно быть например http://chaikoff.ru

  6. Спасибо за совет! Этого оказалось, правда, мало — изменил еще путь в
    // HTTP
    define(‘HTTP_CATALOG’, ‘http://chaikoff.ru/’);
    и
    // HTTPS
    define(‘HTTPS_CATALOG’, ‘http://chaikoff.ru/’);
    и все стало на свои места. Путанный этот RUCENTER ….
    Еще раз спасибо!

  7. Только вот непонятно, почему при переименовании .htaccess.txt на .htaccess сайт становится недоступным?
    htaccess стандартный, ничего в нем не менял, да и пути в нем нет:
    (а его обязательно менять надо?)

    # 1.To use URL Alias you need to be running apache with mod_rewrite enabled.
    # 2. In your opencart directory rename htaccess.txt to .htaccess.
    # For any support issues please visit: http://www.opencart.com
    Options +FollowSymlinks
    # Prevent Directoy listing
    Options -Indexes
    # Prevent Direct Access to files
    <FilesMatch «(?i)((.tpl|.ini|.log|(?<!robots).txt))»>
    Order deny,allow
    Deny from all
    </FilesMatch>
    # SEO URL Settings
    RewriteEngine On
    # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
    RewriteBase /
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
    ### Additional Settings that may need to be enabled for some servers
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an «Internal Server Error 500» after enabling any of the following settings, restore the # as this means your host doesn’t allow that.
    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
    # php_flag register_globals off
    # 2. If your cart has magic quotes enabled, This may work to disable it:
    # php_flag magic_quotes_gpc Off
    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    # php_value upload_max_filesize 999M
    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value post_max_size 999M
    # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_execution_time 200
    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_input_time 200
    # 7. disable open_basedir limitations
    # php_admin_value open_basedir none

  8. уберите все эти портянки. Есть рекомендации по оформлению сообщений http://forum.opencart-russia.ru/threads/rekomendacii-po-oformleniju-koda-i-voprosov.460/

    По htaccess спросите хостера, почему он такой плохой и не хочет принимать нормальный настроенный файл ))

  9. Прячу портянки и пишу корректно)) Так это htaccess корректный:
    (Ваше мнение: в чем проблема может быть у хостера?)

    # 1.To use URL Alias you need to be running apache with mod_rewrite enabled.
    
    # 2. In your opencart directory rename htaccess.txt to .htaccess.
    
    # For any support issues please visit: http://www.opencart.com
    
    Options +FollowSymlinks
    
    # Prevent Directoy listing
    Options -Indexes
    
    # Prevent Direct Access to files
    <FilesMatch "(?i)((.tpl|.ini|.log|(?<!robots).txt))">
    Order deny,allow
    Deny from all
    </FilesMatch>
    
    # SEO URL Settings
    RewriteEngine On
    # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
    
    RewriteBase /
    RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
    RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
    RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*.(ico|gif|jpg|jpeg|png|js|css)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
    
    ### Additional Settings that may need to be enabled for some servers
    ### Uncomment the commands by removing the # sign in front of it.
    ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
    
    # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it:
    # php_flag register_globals off
    
    # 2. If your cart has magic quotes enabled, This may work to disable it:
    # php_flag magic_quotes_gpc Off
    
    # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try
    # php_value upload_max_filesize 999M
    
    # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value post_max_size 999M
    
    # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_execution_time 200
    
    # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields
    # php_value max_input_time 200
    
    # 7. disable open_basedir limitations
    # php_admin_value open_basedir none
    
  10. хостер ответит. Это его проблемы.

    возможно в строке

    <FilesMatch "(?i)((.tpl|.ini|.log|(?<!robots).txt))">

    вариант замены был на форуме.

  11. Вопрос с переименованием .htaccess.txt решен: до этого на хостинге была версия PHP 5.3 хостер установил PHP 5.4 — и все получилось. Странно, т.к. для opencart минимальная версия PHP — 5.3


OpenCart Russia Форум

Понравилась статья? Поделить с друзьями:
  • Как изменить url канала телеграм
  • Как изменить ttl на телевизоре андроид
  • Как изменить url канала на ютуб
  • Как изменить ttl на телевизоре samsung
  • Как изменить url канала на rutube