Автор Тема: Как сделать чтобы в адресе всегда была категория?  (Прочитано 1451 раз)

04 Октябрь 2012, 18:34:47
  • Пользователь
  • **
  • Сообщений: 76
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте.
В престе по умолчанию одну и ту же страницу можно открыть по двум адресам - с категорией и без нее:

http://site.ru/drugie-tovary/76-vaza-dlja-tsvetov.html
http://site.ru/76-vaza-dlja-tsvetov.html

Из-за этого получается много дублей. Что и где нужно дописать чтобы адрес страницы всегда содержал в себе название категории. То есть был вида http://site.ru/ категория / товар. Заранее благодарен

04 Октябрь 2012, 22:16:54
Ответ #1
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
04 Октябрь 2012, 22:37:58
Ответ #2
  • Пользователь
  • **
  • Сообщений: 76
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Буду очень благодарен если напишете что именно нужно добавить в htaccess
05 Октябрь 2012, 11:29:28
Ответ #3
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102503
  • Репутация: +34219/-0
    • Просмотр профиля
Правила относящиеся к страницам категорий:
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang=$1 [QSA,L,E]
08 Октябрь 2012, 09:48:13
Ответ #4
  • Пользователь
  • **
  • Сообщений: 76
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Такое правило как Вы написали у меня уже прописано по умолчанию:
# URL rewriting rules
RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg [L,E]
RewriteRule ^([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2.jpg [L,E]
RewriteRule ^([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg [L,E]
RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$3&isolang=$1$5 [L,E]
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2&isolang=$1$4 [L,E]
[color=red][b]RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang=$1 [QSA,L,E][/b][/color]
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1 [QSA,L,E]
RewriteRule ^content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1 [QSA,L,E]
RewriteRule ^([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 [QSA,L,E]
RewriteRule ^([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 [QSA,L,E]
RewriteRule ^lang-([a-z]{2})/(.*)$ /$2?isolang=$1 [QSA,L,E]

Но все равно страницу любого товара можно открыть как по адресу
http://site.ru/drugie-tovary/76-vaza-dlja-tsvetov.html так и по адресу без категории - http://site.ru/76-vaza-dlja-tsvetov.html. А мне нужно чтобы переадресация всегда шла на адрес с категорией, чтобы в индексе был только адрес вида http://site.ru/категория/товар.html. Что для этого нужно написать?
09 Октябрь 2012, 09:49:42
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Прочтите указания по синтаксису регулярных выражений.
Директива RewriteRule
Синтаксис: RewriteRule Шаблон-Подстановка
Текст:
  .           Любой одиночный символ
  [chars]     Класс символов: Один из символов
  [^chars]    Класс символов: Ни один из символов
  text1|text2 Альтернатива: text1 или text2

Кванторы (символы для обозначения количественных отношений):
  ?           0 или 1 из предшествующего текста
  *           0 или N из предшествующего текста (N > 0)
  +           1 или N из предшествующего текста (N > 1)

Группировка:
  (text)      Группировка текста
              (либо установка границ альтернативы или
              для создания обратных связей где N группа, которая
              может быть использована в RHS директивы RewriteRule с $N)
Маркеры:
  ^           Маркер начала строки
  $           Маркер конца строки
Экранирование:
  \char       экранирование конкретного символа
              (к примеру для указания символов ".[]()" и т.д.)
RewriteRule ^ссылка_какую_хотите ссылка.phpСделать можно так:
#RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang=$1 [QSA,L,E] [QSA,L,E]
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /$2-$3.html [R=301,L]
Но еще нужно будет изменять правила для google site map, карта сайта будет генерироваться с категорией.
09 Октябрь 2012, 10:20:37
Ответ #6
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102503
  • Репутация: +34219/-0
    • Просмотр профиля
Цитата: DarinSr
Сделать можно так:
#RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang=$1 [QSA,L,E] [QSA,L,E]
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /$2-$3.html [R=301,L]
Это правила для категорий, я написал как пример. А в данном случае нужно редактировать правила для продуктов, а не для категорий. Из url
{category:/}{id}-{rewrite}.htmlУбрать
{category:/}
Цитата: realmen80
Буду очень благодарен если напишете что именно нужно добавить в htaccess
У вас несколько таких правил, оставьте то что нужно.
RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$3&isolang=$1$5 [L,E]
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2&isolang=$1$4 [L,E]
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 [L,E]
10 Октябрь 2012, 09:25:21
Ответ #7
  • Пользователь
  • **
  • Сообщений: 76
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Наотвечали кучу всего, но в итоге я так ничего и не понял... Как я и писал мне нужно чтобы в адресе всегда присутствовала категория http://site.ru/ категория / товар.html.
Цитировать
У вас несколько таких правил, оставьте то что нужно.
RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$3&isolang=$1$5 [L,E]
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2&isolang=$1$4 [L,E]
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 [L,E]

Если бы я знач что нужно - я бы не обращался на форум за помощью, а сам бы сделал и все. Если Вы знаете какие именно строки нужно оставить, а какие удалить или изменить чтобы в итоге все адреса были с категорией - напишите, пожалуйста, что мне конкретно нужно сделать чтобы получить нужный результат. Спасибо.
10 Октябрь 2012, 10:33:42
Ответ #8
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102503
  • Репутация: +34219/-0
    • Просмотр профиля
Не знаете как рабоать с htaccess (пробуйте менять, удалять правила, про которые вам написали), что вам мешает сделать
Цитировать
У вас несколько таких правил, оставьте то что нужно.
оставить одно правило в htaccess ?
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 [L,E]Не понравилось, замените на второе и т.д.

У вас не проблема с движком, а изменение стандарной конфигурации. В таких случаях часто нужно использовать комплексное решение. Проще сделать или купить модуль.

Цитировать
Но еще нужно будет изменять правила для google site map, карта сайта будет генерироваться с категорией.

На форуме уже обсуждали как изменить адреса через функцию getProductLink.

Не хотите пробывать и искать решение, то установите модуль URL Rewriting или обновите prestashop до версии 1.5.
10 Октябрь 2012, 11:27:54
Ответ #9
  • Пользователь
  • **
  • Сообщений: 76
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Мне ничего не мешает пробовать - сейчас буду пробовать. Просто я не знал что мою проблему можно решить просто удалением какого-то из правил что уже есть.

По поводу
Цитировать
Но еще нужно будет изменять правила для google site map, карта сайта будет генерироваться с категорией.

Так мне и нужно чтобы было с категорией. Или зачем менять?
11 Октябрь 2012, 13:32:03
Ответ #10
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102503
  • Репутация: +34219/-0
    • Просмотр профиля
Цитата: realmen80
Так мне и нужно чтобы было с категорией. Или зачем менять?
Вам сразу указывают несколько направлений, в которых возможно нужно будет работать, как пример.
Никто точно не знает, что вы хотите получить в результате.
Ничего менять не нужно, если вас устраивает работа этого модуля.
11 Октябрь 2012, 13:39:16
Ответ #11
  • Пользователь
  • **
  • Сообщений: 76
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Никто точно не знает, что вы хотите получить в результате.

Я в первом посте четко написал что мне нужно чтобы все адреса на сайте были вида -  http://site.ru/категория/товар.html. Чтобы нельзя было открыть адрес http://site.ru/товар.html, а сразу же шла переадресация на http://site.ru/категория/товар.html.

За этим решением и обратился на форум за помощью. Хотелось бы получить конкретный ответ. Примерно такого вида.
Чтобы было так как Вам нужно, необходимо в файле htaccess удалить правила ...... и написать вместо них правило ...... или в файле index.php заменить часть кода ..... на .....

11 Октябрь 2012, 18:16:48
Ответ #12
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
На форумах советывают, деляться опытом, но не делают за других работу.
Вы ничего не хотите делать сами,  тогда наймите специалиста.
Есть и другие решения для таких проблем.
Цитировать
Не хотите пробывать и искать решение, то установите модуль URL Rewriting или обновите prestashop до версии 1.5.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.