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

Recommended Posts

извините если баян, но решения так и не нашел.

Нужно редиректить только определенную категорию, например с

site.com/category/OLD_subcategory/product1

site.com/category/OLD_subcategory/product2

на

с site.com/category/NEW_subcategory/product1

с site.com/category/NEW_subcategory/product2

________ в вышеприведенном случае должна изменятся только субкатегория, все остальное остается то что ввел пользователь site.com/(.*)/subcategory/(.*)

или с

site.com/OLD_category/subcategory/product1

site.com/OLD_category/subcategory/product2

на

с site.com/NEW_category/subcategory/product1

с site.com/NEW_category/subcategory/product2

________в вышеприведенном случае должна изменятся только категория, все остальное остается то что ввел пользователь site.com/category/(.*)/(.*)

или с

site.com/OLD_category/OLD_subcategory/product1

site.com/OLD_category/OLD_subcategory/product2

на

с site.com/NEW_category/NEW_subcategory/product1

с site.com/NEW_category/NEW_subcategory/product2

________в вышеприведенном случае должна изменятся только категория и субкатегория, все остальное остается то что ввел пользователь site.com/category/subcategory/(.*)

С опыта использования регулярок понимаю что нужно групировать ссылку по частям типа  ^(.*)/(.*)/(.*)?$

потом уже слживать части используя переменные типа $1, $2, $3

Но в случае с опенкартом там какая то морока с _route_= и единственный хоть как то работоспособный код получился таким:

 

RewriteCond %{QUERY_STRING} ^_route_=category/OLD_subcategory/.*$
RewriteRule ^(/?)/(.*)?$ http ://site.com/category/NEW_category/? [R=301,L] (без пробела после http)
 
Разгруппировать ссылку даже способом RewriteRule ^(.*)/(.*)?$ не получилось не могу понять как тут все вообще происходит, очень много времени потратил на это, не далось.
надеюсь на ваш совет

спасибо

 

p.s htaccess под спойлером

Options +FollowSymlinks
 
# Prevent Directoy listing 
Options -Indexes
 
# Prevent Direct Access to files
<FilesMatch "\.(tpl|ini|log)">
 Order deny,allow
 Deny from all
</FilesMatch>
 
# SEO URL Settings
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 [L,QSA]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

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

ех.. с ответами вижу не густо)

сделал через php, рассказываю как.

 

 

в БД  таблице url_alias создал колонку old_keyword - туда на против нужных товаров аптейтнул старые кейворды из колонки keyword в которую в свою очередь сгенерировал новые, можно и руками пописать кто любит не особо шарит в построении запросов.

Далее под спойлером

в catalog/controller/header.php

после 

$this->load->model('setting/store'); 

строка 

$this->model_setting_store->redirecTtoNewUrl($this->request->server['REQUEST_URI']);

в catalog/model/setting.php два метода

	public function redirecTtoNewUrl($uriString)
    {
        $redirect = false;
        $urisArray = explode('/', $uriString);
        foreach ($urisArray as $key => $uri) {
            $result = $this->getSearchUri($uri);
            if ($result){
                $urisArray[$key] = $result['keyword'];
                $redirect = true;
            }
        }
        if ($redirect){
            $redirect = implode('/', $urisArray);
            $domain = $this->request->server['HTTP_HOST'];
            header('HTTP/1.1 301 Moved Permanently');
            header('Location: http://' . $domain . $redirect );
            exit();
        }
    }

    public function getSearchUri($uri)
    {
        $sql = "SELECT keyword
                    FROM url_alias 
                    WHERE old_keyword 
                    LIKE '" . $uri . "'";
        $query = $this->db->query($sql);
        return $query->row;
    }

 

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

если адрес старой категории или товара по которому пришел пользователь присутствует в колонке old_keyword то его перебрасывает на новую с заголовком 301.

причем урл формеруется полностью до того как сделать редирект, подразумивается что для пользователя в один момент может сгенерироватся полностью новая цепочка адреса категорий или товаров

Всем спасибо)

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

 

Но в случае с опенкартом там какая то морока с _route_=

Никаких заморочек

 

Все правила сразу после Rewrite ON

 

RewriteRule (OLD_category)/(OLD_subcategory)/(.*)  NEW_category/NEW_subcategory/$3

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

Никаких заморочек

 

Все правила сразу после Rewrite ON

 

RewriteRule (OLD_category)/(OLD_subcategory)/(.*)  NEW_category/NEW_subcategory/$3

 

прописал редирект по єтому шаблону после

RewriteEngine On

не заработал совсем ни как,

после

RewriteBase /

тоже пробовал - то же самое

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

а так?

 

RewriteCond %{HTTP_HOST} ^/category/OLD_subcategory/product_id=\[0-9]$
RewriteRule ^(.*)$ http://ваша_сайта.ru/category/NEW_subcategory/product_id=\[0-9]$2? [R=301,L]
помнишь скок бились над этим?)
Надіслати
Поділитися на інших сайтах


а так?

 

RewriteCond %{HTTP_HOST} ^/category/OLD_subcategory/product_id=\[0-9]$
RewriteRule ^(.*)$ http://ваша_сайта.ru/category/NEW_subcategory/product_id=\[0-9]$2? [R=301,L]
помнишь скок бились над этим?)

 

 

:)

%{HTTP_HOST} - только хост!!!!

 

приведенные мною правила работающие, есть одно, но... там КОЕ-ЧЕГО не хватает, а именно инструкции для редиректа.

Но тупое копирование не приветствуется.

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

так ему нужно со всех хостов разве?
ему ж ток подкатегрию

Человеку нужно решение или разгадывание ребусов?
 

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



С опыта использования регулярок понимаю что нужно групировать ссылку по частям типа ^(.*)/(.*)/(.*)?$ потом уже слживать части используя переменные типа $1, $2, $3 Но в случае с опенкартом там какая то морока с _route_= и единственный хоть как то работоспособный код получился таким:

Еще и разобраться

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

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

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

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

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

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

Вхід

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

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

Important Information

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