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

1 minute read

Заметка о том, как как убрать слэш в конце 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)точник