Автор Тема: Проблема со слеш / (слэш)  (Прочитано 1168 раз)

26 Ноябрь 2016, 02:58:22
  • Фрилансер
  • *
  • Сообщений: 182
  • Репутация: +0/-44
    • Просмотр профиля
    • RUS-DESIGN
Здравствуйте!
Прошу помощи.
Есть такие проблемы со слеш
страница товара:
site. com/shop/tovar-1 - работает
добавляю слеш
site. com/shop/tovar-1/ - 404 ошибка

страница производителей доступна как со слеш так и без него
site. com/designers
site. com/designers/
отображается и так и так

страница производителя:
site. com/designers/designer - работает
site. com/designers/designer/ - никуда не перебрасывает но отображается страница со всеми производителями

на всех остальных страницах (главная, категории) идет перенаправление и слеш убирается автоматом

Что нужно сделать? Помогите пожалуйста
26 Ноябрь 2016, 11:41:46
Ответ #1
  • Новичок
  • *
  • Сообщений: 24
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Так бывает из-за правил редиректа. В них слеш учитывает или нет.
26 Ноябрь 2016, 11:55:11
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
У тебя одна проблема, это модуль смены url. Никто тебе точно не скажет как исправить. Причину сказали, осталось только правильно правила RewriteRule подобрать или дефолтные чпу менять.
Зачем сто тем поднимать, пиши в одной, так хоть понятнее будет.
26 Ноябрь 2016, 12:56:39
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 182
  • Репутация: +0/-44
    • Просмотр профиля
    • RUS-DESIGN
У тебя одна проблема, это модуль смены url. Никто тебе точно не скажет как исправить. Причину сказали, осталось только правильно правила RewriteRule подобрать или дефолтные чпу менять.
Зачем сто тем поднимать, пиши в одной, так хоть понятнее будет.

ну так если бы хоть кто то сказал что нужно сделать с редиректом, какое правило добавить, я бы больше не писал.
а вариант с модулем, вообще не катит, сайту 3 года, до этого был на другой платформе, там не было id, соответственно чтобы ничего не потерять я убрал id.

по rewriteRule сможете подсказать что нужно сделать?
26 Ноябрь 2016, 12:57:59
Ответ #4
  • Фрилансер
  • *
  • Сообщений: 182
  • Репутация: +0/-44
    • Просмотр профиля
    • RUS-DESIGN
сможет кто нибудь сказать какое правило нужно добавить и куда?
26 Ноябрь 2016, 13:41:11
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В prestashop слеш в url подставляется в классе /classes/Dispatcher.php в htaccess не требуется дописывать правила. 
26 Ноябрь 2016, 14:07:26
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 182
  • Репутация: +0/-44
    • Просмотр профиля
    • RUS-DESIGN
В prestashop слеш в url подставляется в классе /classes/Dispatcher.php в htaccess не требуется дописывать правила.

блин, может я не так пишу.
вобщем смысл такой
есть категория
site. com/shop/man
эта категория доступка как с слэшем так и без него, когда добавляешь сам слеш то он редиректит на без слеша.
тоже самое и с главной страницей.
НО
такого не происходит  со страницей со всеми производителями и с каждым производителем в отдельности, также такого не происходит на страницах товаров.
так как же сделать чтобы все страницы были доступны со слешем и без него, но не дубли а чтобы я мог подставить слеш и он переходил на без него.

я сколько сайтов знаю, везде у всез работает так. у меня у самого раньше было именно так. а тут хрень какая то.
26 Ноябрь 2016, 15:15:41
Ответ #7
  • Фрилансер
  • *
  • Сообщений: 182
  • Репутация: +0/-44
    • Просмотр профиля
    • RUS-DESIGN
добавил в dispatcher.php

$uri = preg_replace("/\?.*/i",'', $_SERVER['REQUEST_URI']);
 
if (strlen($uri)>1) {// если не главная страница...
  if (rtrim($uri,'/')!=$uri) {
    header("HTTP/1.1 301 Moved Permanently");
    header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace($uri, rtrim($uri,'/'), $_SERVER['REQUEST_URI']));
    exit();   
  }
}
все дубли пропали, страницы и производители теперь открываются как с / так и без /, набираю / на конце он перекидывает на без /.
то что надо.
вот только не знаю насколько это правильно в плане "программно".
в плане seo это верное решение на 100%.
26 Ноябрь 2016, 19:51:31
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Программно правильно или нет проверятся так, работает, значит правильно. И не заморачивайся, код твой никто кроме тебя не видет. Это в  команде нужно соблюдать правила кодирования. Когда сам делаешь, то не важно какой код.
31 Октябрь 2017, 17:54:51
Ответ #9
  • Новичок
  • *
  • Сообщений: 30
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
добавил в dispatcher.php

$uri = preg_replace("/\?.*/i",'', $_SERVER['REQUEST_URI']);
 
if (strlen($uri)>1) {// если не главная страница...
  if (rtrim($uri,'/')!=$uri) {
    header("HTTP/1.1 301 Moved Permanently");
    header('Location: http://'.$_SERVER['SERVER_NAME'].str_replace($uri, rtrim($uri,'/'), $_SERVER['REQUEST_URI']));
    exit();   
  }
}
все дубли пропали, страницы и производители теперь открываются как с / так и без /, набираю / на конце он перекидывает на без /.
то что надо.
вот только не знаю насколько это правильно в плане "программно".
в плане seo это верное решение на 100%.

Подскажите, пожалуйста, имеет ли значение куда именно добавить этот кусок (после или до каких-либо других правил)? После добавления его в Dispatcher.php перед "protected function setRequestUri()" открывается пустая страница... Prestashop 1.6.1.6