В этом уроке мы рассмотрим детали пользовательских 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.
Спасибо, что дочитали до конца, успеха в делах!
-
Уважаемые господа,
У нас после установки 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.
Что подскажите?
Заранее благодарен
-
Ален,
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) — сайт становится недоступным. А это почему?
-
ведь написанопочему бы так не сделать? а?
-
Так все и было:
— сначала был установлен 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 страниц? -
// HTTP define('HTTP_SERVER', 'http://chaikoff.nichost.ru/'); // HTTPS define('HTTPS_SERVER', 'http://chaikoff.nichost.ru/');вот тут должно быть например http://chaikoff.ru
-
Спасибо за совет! Этого оказалось, правда, мало — изменил еще путь в
// HTTP
define(‘HTTP_CATALOG’, ‘http://chaikoff.ru/’);
и
// HTTPS
define(‘HTTPS_CATALOG’, ‘http://chaikoff.ru/’);
и все стало на свои места. Путанный этот RUCENTER ….
Еще раз спасибо! -
Только вот непонятно, почему при переименовании .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 -
уберите все эти портянки. Есть рекомендации по оформлению сообщений http://forum.opencart-russia.ru/threads/rekomendacii-po-oformleniju-koda-i-voprosov.460/
По 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 -
хостер ответит. Это его проблемы.
возможно в строке
<FilesMatch "(?i)((.tpl|.ini|.log|(?<!robots).txt))">
вариант замены был на форуме.
-
Вопрос с переименованием .htaccess.txt решен: до этого на хостинге была версия PHP 5.3 хостер установил PHP 5.4 — и все получилось. Странно, т.к. для opencart минимальная версия PHP — 5.3



