Magento: как убрать последний слэш из URL сайта


Заметка о том, как как убрать слэш в конце URL, не навредив работе магазина.

Для чего это нужно: Для сервера mydomain.com/category и mydomain.com/category/ это одно и то же. Но для поисковых систем это две разные страницы с одинаковым контентом. И это не есть хорошо. Те сайты, которые уличены в такой, казалось бы мелочи, начинают падать в самый низ поисковых рейтингов.

Что нужно делать:
Для начала нам нужно немного исправить функцию getUrl(), чтобы в генерируемых URL не было замыкающего слэша. Для того, чтобы не вносить изменения в само ядро (что черевато потерей всего custom функционала при обновлении Magento) копируем файл app/code/core/Mage/Core/Block/Abstract.php в app/code/local/Mage/Core/Block/Abstract.php.

Находим функцию getUrl() в файле app/code/local/Mage/Core/Block/Abstract.php (941 строка):

public function getUrl($route = '', $params = array())
     {
          return $this->_getUrlModel()->getUrl($route, $params);
     }

Меняем код этой функции на вот этот:

public function getUrl($route = '', $params = array())
     {
          $return_url = $this->_getUrlModel()->getUrl($route, $params);
          if ($return_url != $this->getBaseUrl() && substr($return_url, -1) == '/' && !Mage::getSingleton('admin/session')->isLoggedIn()):
             return substr($return_url, 0, -1);
         else:
              return $return_url;
         endif;
     }

Дальше нам нужно будет отредактировать .htaccess в корне сайта следующими строками:

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

В стандартный .htaccess это нужно добавить после строки:

RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Если у Вас multi-store, то правила в .htaccess нужно добавлять для каждого магазина.

и(C)точник

Share Button
(Visited 323 times, 1 visits today)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *