Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Соответствующая.

seo_pro.php(ocStore1.5.5).zip - сам файлик seo_pro.php отсюда? :) попробовал этот файлик, проблема та же. Причем точки вконце отрабатывает норм, генерит 301 и перебрасывает на верный ЮРЛ, а вот точку вначале никак. у Вас же все ок. Причем не пойму связи версии самого движка магазина, ЮРЛ то сразу попадает в seo_pro.php который его обрабатывает?

 

А есть кто использующий seo_pro на OpenCart 1.5.6 ?

 

P.S.

но Вы все же согласны что это не есть хорошо?  :-)

Надіслати
Поділитися на інших сайтах


seo_pro.php(ocStore1.5.5).zip - сам файлик seo_pro.php отсюда? :)

Модификация SEO Pro от freelancer входит в дистрибутив ocStore 1.5.5.1.1, поэтому и написал, что соответствующая.

В шапке темы есть комментарий:

Сообщение отредактировал freelancer: 06 Ноябрь 2013 - 08:11

обновил seopro из ocStore

что говорит о том, что в шапку добавлена данная версия.

 

но Вы все же согласны что это не есть хорошо? :-)

Я не говорил, что это хорошо, просто не люблю поспешные выводы, а Вы их сделали, данная проблема отсутствует при корректной работе SEO Pro, остальное персоналии.

Надіслати
Поділитися на інших сайтах


Модификация SEO Pro от freelancer входит в дистрибутив ocStore 1.5.5.1.1, поэтому и написал, что соответствующая.

В шапке темы есть комментарий:

что говорит о том, что в шапку добавлена данная версия.

В том то и дело, что я использую версию из шапки, после ее обновления. Да и только что перепробовал все варианты файла seo_pro.php проблема не исчезает. Видимо все же что-то связано со стыковкой с OpenCart 1.5.6.

 

Смог добиться только закомментировав 80, и 81ю строки:

 

list($last_part) = explode('.', array_pop($parts));

array_push($parts, $last_part);

 

Не совсем понял для чего это сделано. Подкажет кто?

 

Причем проблема возникает только когда точка последней правой части ЮРЛА, сколько не ставь точки в начало или конец других частей, до или после слешей все ок, даже в последней части, если поставить точку вконец то все ок.

Надіслати
Поділитися на інших сайтах


Видимо все же что-то связано со стыковкой с OpenCart 1.5.6.

Корректную работу SEO Pro на OpenCart версии 1.5.6 никто не тестировал и не гарантировал, так что к Вашему сожалению - возможно всё.

 

Не совсем понял для чего это сделано. Подкажет кто?

Для определения окончания ЧПУ, например, .html, точка - разделитель.

Надіслати
Поділитися на інших сайтах


Корректную работу SEO Pro на OpenCart версии 1.5.6 никто не тестировал и не гарантировал, так что к Вашему сожалению - возможно всё.

 

Для определения окончания ЧПУ, например, .html, точка - разделитель.

Спасибо за пояснение. Теперь понял для чего отсекается точка. В случае не использования таких окончаний думаю можно оставить эти строки закомментированными до выяснение причин и совместимостей с 1.5.6.

Правда у меня он выдает 404 в таких случаях, а в Вашем примере после точки редиректит на главную. Странно, но это уже не есть проблем.

Спасибо за дискуссию :)

Надіслати
Поділитися на інших сайтах


Пардон если оффтоп. А раз уж тема пошла, может удастся получить подсказку, как к ЮРЛ товара подставлять ?variable=a ? потому как seo_pro его съедает и не дает мне возможности передать мой параметр контроллеру. В категориях все ок, добавляю свое значение и оно не съедается. 

Ну и буду признателен за подсказу, как и где seo_pro подменяет ЮРЛы формируемые контроллером?! У меня в многих местах на сайте формировались специальные ЮРЛы в контроллере, после установки seo_pro это все перестало работать, какой бы я не формировал ЮРЛ в контроллере(что бы не добавлял к нему) все равно в темплейте ловлю сеошный ЮРЛ к товару, согласно пути т.е. так как его сформировал seo_pro!

 

Заранее спасибо!

Надіслати
Поділитися на інших сайтах


Пардон если оффтоп. А раз уж тема пошла, может удастся получить подсказку, как к ЮРЛ товара подставлять ?variable=a ? потому как seo_pro его съедает и не дает мне возможности передать мой параметр контроллеру.

 

Заранее спасибо!

Есть такое дело, этот баг надо было давно исправить.

Как совет пользуйтесь ?tracking=page-2_sort-desc (page и tracking seo_pro не удаляет, остальные параметры get просто убивает) и т.п. с разделителем _ для параметров. Не очень конечно красиво, но другого выхода пока нет для seo_pro

Надіслати
Поділитися на інших сайтах

Есть такое дело, этот баг надо было давно исправить.

Как совет пользуйтесь ?tracking=page-2_sort-desc (page и tracking seo_pro не удаляет, остальные параметры get просто убивает) и т.п. с разделителем _ для параметров. Не очень конечно красиво, но другого выхода пока нет для seo_pro

Я попытался решить вот так:

if (isset($tmp['tracking'])) {
$data['tracking'] = $tmp['tracking'];
}

// added
if (isset($tmp['variable'])) { 
$data['variable'] = $tmp['variable'];
}

Теперь моя переменная перестала кушаться в продукте и в списке товаров(категориях) ЮРЛы перехода к товарам стали нормальными, т.е. такими как я их формирую.

 

Осталось придумать как ?variable=a превратить в /variable-a/ :) .htaccess подправил для этого, в таблицу url_alias внес, при переходе на /variable-a/ перескакивает (редирект) на ?variable=a 

Надіслати
Поділитися на інших сайтах


 

Я попытался решить вот так:

if (isset($tmp['tracking'])) {
$data['tracking'] = $tmp['tracking'];
}

// added
if (isset($tmp['variable'])) { 
$data['variable'] = $tmp['variable'];
}

Теперь моя переменная перестала кушаться в продукте и в списке товаров(категориях) ЮРЛы перехода к товарам стали нормальными, т.е. такими как я их формирую.

 

Осталось придумать как ?variable=a превратить в /variable-a/ :) .htaccess подправил для этого, в таблицу url_alias внес, при переходе на /variable-a/ перескакивает (редирект) на ?variable=a 

 

Ну это вам пришлось допиливать SeoPro

А я имел ввиду универсальное решение, а не к конкретному сайту.

Надіслати
Поділитися на інших сайтах

Такая проблема: есть магазин на ocStore 1.5.5.1.1 после добавления новых товаров у них не отображаться чпу, у раннее добавленных товаров, категорий .. все норм. После удаления кэша seopro (cache.seo_pro) чпу  всех товаров начинает нормально отображаться!! Глюк проявился спонтанно, изменений на сайте не было. Подскажите куда копать?

Надіслати
Поділитися на інших сайтах


никуда - удалили кеш - все нормально - уже хорошо.

Копать? в сторону добавления/изменения в таблицу url_alias - удалили кеш

Или сделать "пимпочку" - удаление seo кеш

Надіслати
Поділитися на інших сайтах

memcached

никуда - удалили кеш - все нормально - уже хорошо.

Копать? в сторону добавления/изменения в таблицу url_alias - удалили кеш

Или сделать "пимпочку" - удаление seo кеш

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

 

P.S. разворачивал из бекапа на localhost эффект такой же как и на боевом.

P.P.S. изначально все кэшировалось не на диск, а в memcached. После того как заметил, что сео урлы не подтягиваются перевел весь кэш на диск (думал что проблема в memcached), но нет....

Надіслати
Поділитися на інших сайтах


Есть несколько идентичных категорий с подкатегориями, изначально появились при переходе на новую версию сайта.

 

1. Квадроциклы \ Запчасти для Yamaha

2. Запчасти в наличии \ для квадроциклов Yamaha

 

Движок OcStore 1.5.5.1, настроен SeoPro и ЧПУ. 

 

Хочу сделать переадресацию с "Запчасти в наличии \ для квадроциклов Yamaha" на "Квадроциклы \ Запчасти для Yamaha" и в последствии убрать "Запчасти в наличии".

 

В htaccess добавляю строку

Redirect 301 /zapchasti-v-nalichii/dlya-kvadrociklov-brp/ http://snegoatv.ru/kvadrocikly/zapchasti-dlya-brp-/

 

В итоге перекидывает на страницу http://snegoatv.ru/kvadrocikly/zapchasti-dlya-brp-/?_route_=zapchasti-v-nalichii/dlya-kvadrociklov-brp/

и появляется Ошибка: На этой странице обнаружена циклическая переадресация

 

Что делаю не так?

Надіслати
Поділитися на інших сайтах

Здравствуйте!

Пользуюсь SeoPro. Все отлично работает, уже как год =)

Окончание ЧПУ: html

 

Сегодня начал разбираться с Метками в URL (http://help.yandex.ru/metrika/sources/tags.xml) добавляю к URL site.ru/catrgory/tovar.html?from=test_metok. При переходе по такой ссылки, моментально срабатывает редирект на site.ru/catrgory/tovar.html , естественно, метрика/аналитика  не успевает взять инфу с метки.

 

Но! На главной странице, страницах(статьях) и в категориях - все работает хорошо, редирект на срабатывает. Инфа появляется в статистике.

site.ru/?from=test_metok

site.ru/iphone?from=test_metok

site.ru/about.html?from=test_metok

 

А вот в товарах, с этим редиректом не работают метки.

 

Сталкивался кто с таким? Избавиться от .html не могу.

 

----------

 

Спасибо zubovd!

В seopro.php находим:

if (isset($tmp['tracking'])) {
$data['tracking'] = $tmp['tracking'];
}
 
Копируем, и вставляем ниже. Вместо tracking стаим свои теги.
Например у меня получилось так:
if (isset($tmp['tracking'])) {
$data['tracking'] = $tmp['tracking'];
}
if (isset($tmp['utm_source'])) {
$data['utm_source'] = $tmp['utm_source'];
}
if (isset($tmp['utm_medium'])) {
$data['utm_medium'] = $tmp['utm_medium'];
}
if (isset($tmp['utm_campaign'])) {
$data['utm_campaign'] = $tmp['utm_campaign'];
}
if (isset($tmp['utm_content'])) {
$data['utm_content'] = $tmp['utm_content'];
}
if (isset($tmp['from'])) {
$data['from'] = $tmp['from'];
}
if (isset($tmp['utm_term'])) {
$data['utm_term'] = $tmp['utm_term'];
}
 
 

zubovd советует в robots.txt закрыть эти теги, но я надеюсь что тег rel="canonical" не даст попасть дублям в поиск.

Змінено користувачем PVL
Надіслати
Поділитися на інших сайтах


Добрый день! Прошу помощи, сам не могу разобраться в чем проблема.

 

ocStore 1.5.5.1.1

SeoPro встроен.

сайт: terratex.ru

 

ЧПУ вкл

SeoPro выбран

ЧПУ товаров с категориями: нет

окончание .html

 

В чем проблема:

Все ссылки на товары, новости, контакты, производителя - идеальные, 1-в-1 как прописано в url_alias. К примеру: http://terratex.ru/7382e6g-server-ibm-system-x3300-m4-express.html

А вот ссылки на любую категорию имеет страшный вид: http://terratex.ru/index.php?route=product/category&path=1664_1665_1666

Хотя в url_alias прописаны все чпу для категорий, пример: url_alias_id query keyword dot.gif dot.gif dot.gif 8701 category_id=1610 catalog/computers/HP_7500_Elite

 

Если включить вместо SeoPro режим "По умолчанию", пропадают чпу у производителей, у категорий они появляются, но по этим ссылкам выдается "Запрашиваемая страница не найдена".

 

Что делать не знаю...попробовал уже по-моему все что можно. Помогите!

 

Файл .htaccess

Options +SymLinksIfOwnerMatch
Options -Indexes

Order deny,allow
Deny from all





RewriteEngine On
#RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^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 [QSA]


RewriteCond %{HTTP_HOST} ^(www\.terratex\.ru)(:80)? [NC]
RewriteRule ^(.*) http://terratex.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://terratex.ru/ [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/
RewriteRule ^index\.html$ / [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]

 

Код файла seo_pro

class ControllerCommonSeoPro extends Controller {
private $cache_data = null;

public function __construct($registry) {
parent::__construct($registry);
$this->cache_data = $this->cache->get('seo_pro');
if (!$this->cache_data) {
$query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias");
$this->cache_data = array();
foreach ($query->rows as $row) {
$this->cache_data['keywords'][$row['keyword']] = $row['query'];
$this->cache_data['queries'][$row['query']] = $row['keyword'];
}
$this->cache->set('seo_pro', $this->cache_data);
}
}

public function index() {

// Add rewrite to url class
if ($this->config->get('config_seo_url')) {
$this->url->addRewrite($this);
} else {
return;
}

// Decode URL
if (!isset($this->request->get['_route_'])) {
$this->validate();
} else {
$route_ = $route = $this->request->get['_route_'];
unset($this->request->get['_route_']);
$parts = explode('/', trim(utf8_strtolower($route), '/'));
list($last_part) = explode('.', array_pop($parts));
array_push($parts, $last_part);

$rows = array();
foreach ($parts as $keyword) {
if (isset($this->cache_data['keywords'][$keyword])) {
$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);
}
}

if (count($rows) == sizeof($parts)) {
$queries = array();
foreach ($rows as $row) {
$queries[utf8_strtolower($row['keyword'])] = $row['query'];
}

reset($parts);
foreach ($parts as $part) {
$url = explode('=', $queries[$part], 2);

if ($url[0] == 'category_id') {
if (!isset($this->request->get['path'])) {
$this->request->get['path'] = $url[1];
} else {
$this->request->get['path'] .= '_' . $url[1];
}
} elseif (count($url) > 1) {
$this->request->get[$url[0]] = $url[1];
}
}
} else {
$this->request->get['route'] = 'error/not_found';
}

if (isset($this->request->get['product_id'])) {
$this->request->get['route'] = 'product/product';
if (!isset($this->request->get['path'])) {
$path = $this->getPathByProduct($this->request->get['product_id']);
if ($path) $this->request->get['path'] = $path;
}
} 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';
} elseif(isset($this->cache_data['queries'][$route_])) {
header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');
$this->response->redirect($this->cache_data['queries'][$route_]);
} else {
if (isset($queries[$parts[0]])) {
$this->request->get['route'] = $queries[$parts[0]];
}
}


$this->validate();

if (isset($this->request->get['route'])) {
return $this->forward($this->request->get['route']);
}
}
}

public function rewrite($link) {
if (!$this->config->get('config_seo_url')) return $link;

$seo_url = '';

$component = parse_url(str_replace('&', '&', $link));

$data = array();
parse_str($component['query'], $data);

$route = $data['route'];
unset($data['route']);

switch ($route) {
case 'product/product':
if (isset($data['product_id'])) {
$tmp = $data;
$data = array();
if ($this->config->get('config_seo_url_include_path')) {
$data['path'] = $this->getPathByProduct($tmp['product_id']);
if (!$data['path']) return $link;
}
$data['product_id'] = $tmp['product_id'];
if (isset($tmp['tracking'])) {
$data['tracking'] = $tmp['tracking'];
}
}
break;

case 'product/category':
if (isset($data['path'])) {
$category = explode('_', $data['path']);
$category = end($category);
$data['path'] = $this->getPathByCategory($category);
if (!$data['path']) return $link;
}
break;

case 'product/product/review':
case 'information/information/info':
return $link;
break;

default:
break;
}

if ($component['scheme'] == 'https') {
$link = $this->config->get('config_ssl');
} else {
$link = $this->config->get('config_url');
}

$link .= 'index.php?route=' . $route;

if (count($data)) {
$link .= '&' . urldecode(http_build_query($data, '', '&'));
}

$queries = array();
foreach ($data as $key => $value) {
switch ($key) {
case 'product_id':
case 'manufacturer_id':
case 'category_id':
case 'information_id':
$queries[] = $key . '=' . $value;
unset($data[$key]);
$postfix = 1;
break;

case 'path':
$categories = explode('_', $value);
foreach ($categories as $category) {
$queries[] = 'category_id=' . $category;
}
unset($data[$key]);
break;

default:
break;
}
}

if(empty($queries)) {
$queries[] = $route;
}

$rows = array();
foreach($queries as $query) {
if(isset($this->cache_data['queries'][$query])) {
$rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]);
}
}

if(count($rows) == count($queries)) {
$aliases = array();
foreach($rows as $row) {
$aliases[$row['query']] = $row['keyword'];
}
foreach($queries as $query) {
$seo_url .= '/' . rawurlencode($aliases[$query]);
}
}

if ($seo_url == '') return $link;

$seo_url = trim($seo_url, '/');

if ($component['scheme'] == 'https') {
$seo_url = $this->config->get('config_ssl') . $seo_url;
} else {
$seo_url = $this->config->get('config_url') . $seo_url;
}

if (isset($postfix)) {
$seo_url .= trim($this->config->get('config_seo_url_postfix'));
} else {
$seo_url .= '/';
}

if(substr($seo_url, -2) == '//') {
$seo_url = substr($seo_url, 0, -1);
}

if (count($data)) {
$seo_url .= '?' . urldecode(http_build_query($data, '', '&'));
}

return $seo_url;
}

private function getPathByProduct($product_id) {
$product_id = (int)$product_id;
if ($product_id < 1) return false;

static $path = null;
if (!is_array($path)) {
$path = $this->cache->get('product.seopath');
if (!is_array($path)) $path = array();
}

if (!isset($path[$product_id])) {
$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1");

$path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);

$this->cache->set('product.seopath', $path);
}

return $path[$product_id];
}

private function getPathByCategory($category_id) {
$category_id = (int)$category_id;
if ($category_id < 1) return false;

static $path = null;
if (!is_array($path)) {
$path = $this->cache->get('category.seopath');
if (!is_array($path)) $path = array();
}

if (!isset($path[$category_id])) {
$max_level = 10;

$sql = "SELECT CONCAT_WS('_'";
for ($i = $max_level-1; $i >= 0; --$i) {
$sql .= ",t$i.category_id";
}
$sql .= ") AS path FROM " . DB_PREFIX . "category t0";
for ($i = 1; $i < $max_level; ++$i) {
$sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";
}
$sql .= " WHERE t0.category_id = '" . $category_id . "'";

$query = $this->db->query($sql);

$path[$category_id] = $query->num_rows ? $query->row['path'] : false;

$this->cache->set('category.seopath', $path);
}

return $path[$category_id];
}

private function validate() {
if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') {
return;
}
if(empty($this->request->get['route'])) {
$this->request->get['route'] = 'common/home';
}

if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
return;
}

if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
$config_ssl = substr($this->config->get('config_ssl'), 0, $this->strpos_offset('/', $this->config->get('config_ssl'), 3) + 1);
$url = str_replace('&', '&', $config_ssl . ltrim($this->request->server['REQUEST_URI'], '/'));
$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL'));
} else {
$config_url = substr($this->config->get('config_url'), 0, $this->strpos_offset('/', $this->config->get('config_url'), 3) + 1);
$url = str_replace('&', '&', $config_url . ltrim($this->request->server['REQUEST_URI'], '/'));
$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL'));
}

if (rawurldecode($url) != rawurldecode($seo)) {
header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');

$this->response->redirect($seo);
}
}

private function strpos_offset($needle, $haystack, $occurrence) {
// explode the haystack
$arr = explode($needle, $haystack);
// check the needle is not out of bounds
switch($occurrence) {
case $occurrence == 0:
return false;
case $occurrence > max(array_keys($arr)):
return false;
default:
return strlen(implode($needle, array_slice($arr, 0, $occurrence)));
}
}

private function getQueryString($exclude = array()) {
if (!is_array($exclude)) {
$exclude = array();
}

return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude))));
}
}
?>

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.