Страница 1 из 1

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

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

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

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

Добавлено: 08.02.2018, 11:06
korshunov
Пробуйте в 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}

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

Добавлено: 10.02.2018, 08:33
dabustard
Еще в админке проблема, где-то настроен редирект с /backend на /backend/ соответственно со строкой

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

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

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

Добавлено: 12.02.2018, 09:59
makki
Для того, чтобы убирать слэш в конце 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();
    }
}

Добавлено: 12.02.2018, 10:13
dabustard
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:'/'}

Добавлено: 16.02.2018, 15:55
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% не могу, возможно, она присутствует и на сайтах, где указанные выше изменения не вносились (проверьте у себя пожалуйста). У меня сайт ДО исправлений не индексировался, а потому проверить у себя не могу.

Добавлено: 14.03.2018, 11:40
makki
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}


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