Удаление последнего слэша из URL Magento

Здравствуйте, Хаброжители!

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

Для чего это нужно:

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

Что нужно делать:

К сожалению, что бы исправить это недуг в Magento, нам придется перезаписать один файл ядра. Других способов решения проблемы я не нашел. Для начала нам нужно немного исправить функцию getUrl(), чтобы в генерируемых URL не было замыкающего слэша. Для того, чтобы не вносить изменения в само ядро (что черевато потерей всего custom функционала при обновлении Magento) копируем файл app/code/core/Mage/Core/Block/Abstract.php в app/code/local/Mage/Core/Block/Abstract.php. В файле app/code/local/Mage/Core/Block/Abstract.php находим функцию getUrl() (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;
    }

Теперь все URL который будут строиться при помощи функции getUrl() будут без слэша в конце.
Отлично, полпути пройдено. Дальше нам нужно будет отредактировать .htaccess, и добавить 301 редирект со страниц со слэшем на страницы без слэша.
Итак, ищем в файлике .htaccess вот такую строку:
 RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Сразу после нее добавляем вот эти строки:
RewriteCond %{request_method} ^GET$
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)$ %1 [L,R=301]

И собственно все. Теперь вы можете спась спокойно, и не бояться того, что великий бог поисковиков разгневается на вас из-за дубликатов страниц.

P.S.: На всякий случай напомню, что если магазин multi-store, то .htaccess нужно править для каждого магазина.
Tags:
php,seo,magento,trailing slash

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.