Слеш на конце URL для второстепенных языков

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

dabustard
dabustard
Репутация: 4
Сообщения: 25
Зарегистрирован: 26.01.2018
С нами: 1 год 3 месяца

Сообщение #1 dabustard » 08.02.2018, 10:12

Задался целью убрать дубли страниц (www и без-www, слеш на конце и т.п.) и обнаружил, что ссылка в переключателе на главную страницу второстепенного языка имеет вид www.demookay.com/en/ но при этом каноничный url прописан без слеша на конце - www.demookay.com/en
Это "баг" или "фича"?

В .htaccess прописал редирект на версию без слеша такой строкой
RewriteRule (.+)/$ /$1 [L,R=301]

Работает, но хотелось бы получить правильную ссылку в переключателе.

korshunov
korshunov
Репутация: 99
Сообщения: 968
Зарегистрирован: 03.12.2015
С нами: 3 года 5 месяцев
Skype

Сообщение #2 korshunov » 08.02.2018, 11:06

Пробуйте в index.tpl заменить

Код: Выделить всё

                                    {if $l->enabled}
                                        <a class="dropdown_item{if $language->id == $l->id} active{/if}"
                                           href="{$l->url}"><img src="files/lang/{$l->label}.png" width="20">
                                           <span class="tablet-hidden">{$l->{'name_'|cat:$language->label}}</span>
                                           <span class="lg-hidden">{$l->label}</span>
                                        </a>
                                    {/if}


на

Код: Выделить всё

                                    {if $l->enabled}
                                        <a class="dropdown_item{if $language->id == $l->id} active{/if}"
                                           href="{$l->url|trim:'/'}"><img src="files/lang/{$l->label}.png" width="20">
                                           <span class="tablet-hidden">{$l->{'name_'|cat:$language->label}}</span>
                                           <span class="lg-hidden">{$l->label}</span>
                                        </a>
                                    {/if}

dabustard
dabustard
Репутация: 4
Сообщения: 25
Зарегистрирован: 26.01.2018
С нами: 1 год 3 месяца

Сообщение #3 dabustard » 08.02.2018, 11:26

Спасибо! Замена {$l->url} на {$l->url|trim:'/'} работает как надо! А я уже начал ковырять View.php :)

dabustard
dabustard
Репутация: 4
Сообщения: 25
Зарегистрирован: 26.01.2018
С нами: 1 год 3 месяца

Сообщение #4 dabustard » 10.02.2018, 08:33

Еще в админке проблема, где-то настроен редирект с /backend на /backend/ соответственно со строкой

Код: Выделить всё

RewriteRule (.+)/$ /$1 [L,R=301]

возникает ошибка ERR_TOO_MANY_REDIRECTS

makki
makki
Репутация: 147
Сообщения: 418
Зарегистрирован: 12.08.2016
С нами: 2 года 9 месяцев
Откуда: Киев
Сайт Skype

Сообщение #5 makki » 12.02.2018, 09:59

Для того, чтобы убирать слэш в конце url и избавиться от возможных дублей предложу такой вариант.
В файле index.php после

Код: Выделить всё

if(isset($_GET['logout'])) {
    unset($_SESSION['admin']);
    header('location: '.$view->config->root_url);
    exit();
}

добавить такой код

Код: Выделить всё

$current_uri = $_SERVER["REQUEST_URI"];
if($current_uri !== '/' && substr($current_uri, 0,8) !=='/backend'){
    $uri = rtrim($current_uri, "/");
    if($current_uri != $uri){
        header("Location: ".$uri, true, 301);
        exit();
    }
}
Последний раз редактировалось makki 12.02.2018, 10:23, всего редактировалось 4 раза.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS

dabustard
dabustard
Репутация: 4
Сообщения: 25
Зарегистрирован: 26.01.2018
С нами: 1 год 3 месяца

Сообщение #6 dabustard » 12.02.2018, 10:13

makki, ваш вариант не проверял, у себя решил проблему дублей страниц со слешем на конце так:

1. Настраиваем 301 редирект со страниц с "/" на конце на такие же без "/" на конце url
В .htaccess, после строк

Код: Выделить всё

RewriteEngine on
#RewriteBase /

добвляем строки:

Код: Выделить всё

RewriteCond %{REQUEST_URI} !^/backend
RewriteRule (.+)/$ /$1 [L,R=301]

2. Исправляем ссылку в переключателе языков (спасибо korshunov) :
В файле index.tpl заменяем {$l->url} на {$l->url|trim:'/'}

dabustard
dabustard
Репутация: 4
Сообщения: 25
Зарегистрирован: 26.01.2018
С нами: 1 год 3 месяца

Сообщение #7 dabustard » 16.02.2018, 15:55

Обнаружилась еще одна проблема - для главной страницы на альтернативным языке, гугл вебмастер, в разделе геотаргетинг, выдал ошибку, что для страницы нет обратных ссылок. Как я понял тут дело в тегах rel="alternate", а именно (покажу на примере демосайта):
- есть главная страница на основном языке www.demookay.com и ее альтернативная версия www.demookay.com/en (без слеша на конце, я его убрал ранее), на обеих прописаны теги:
<link rel="alternate" hreflang="ru" href="http://www.demookay.com/">
<link rel="alternate" hreflang="en" href="http://www.demookay.com/en/">
Как видно - со слешем на конце. Подозреваю, что ошибка именно из-за этого и наблюдается, но сказать на 100% не могу, возможно, она присутствует и на сайтах, где указанные выше изменения не вносились (проверьте у себя пожалуйста). У меня сайт ДО исправлений не индексировался, а потому проверить у себя не могу.

makki
makki
Репутация: 147
Сообщения: 418
Зарегистрирован: 12.08.2016
С нами: 2 года 9 месяцев
Откуда: Киев
Сайт Skype

Сообщение #8 makki » 14.03.2018, 11:40

dabustard писал(а):Обнаружилась еще одна проблема - для главной страницы на альтернативным языке, гугл вебмастер, в разделе геотаргетинг, выдал ошибку, что для страницы нет обратных ссылок. Как я понял тут дело в тегах rel="alternate", а именно (покажу на примере демосайта):
- есть главная страница на основном языке www.demookay.com и ее альтернативная версия www.demookay.com/en (без слеша на конце, я его убрал ранее), на обеих прописаны теги:
<link rel="alternate" hreflang="ru" href="http://www.demookay.com/">
<link rel="alternate" hreflang="en" href="http://www.demookay.com/en/">
Как видно - со слешем на конце. Подозреваю, что ошибка именно из-за этого и наблюдается, но сказать на 100% не могу, возможно, она присутствует и на сайтах, где указанные выше изменения не вносились (проверьте у себя пожалуйста). У меня сайт ДО исправлений не индексировался, а потому проверить у себя не могу.
Чтобы исправить эту проблему в index.tpl вместо

Код: Выделить всё

    {* Language attribute *}
    {if !$hide_alternate}
        {foreach $languages as $l}
            {if $l->enabled}
                <link rel="alternate" hreflang="{$l->href_lang}" href="{$config->root_url}/{$l->url}">
            {/if}
        {/foreach}
    {/if}

пишем

Код: Выделить всё

    {* Language attribute *}
    {if !$hide_alternate}
        {foreach $languages as $l}
            {if $l->enabled}
                <link rel="alternate" hreflang="{$l->href_lang}" href="{$config->root_url|cat:"/"|cat:$l->url|trim:'/'}">
            {/if}
        {/foreach}
    {/if}


Надеюсь разработчики исправят в следующем обновлении ошибки замеченные в этой теме. Считаю их критичными.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS


Название раздела: Баг-репорт OkayCMS (Сообщения об ошибках)
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Баг-репорт OkayCMS (Сообщения об ошибках)»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость