После переноса сайта с одного хостинга на другой пришлось столкнуться с проблемой, решение которой отняло чуть больше времени, чем обычно. Поэтому излагаю её здесь.
Суть проблемы:
Есть сайт на Joomla, включены ЧПУ, на новом хостинге всё функционирует отлично. Ссылки на сайте выглядят как http://site.by/section/category/
Но, будучи на старом хостинге, все страницы сайта чудесным образом проиндексировались поисковыми системами как http://site.by/index.php/section/category/
В результате, если заходить на сайт напрямую, то сайт красиво работает на новом хостинге. Однако, люди, заходящие из поисковиков, видят криво работающий сайт (не подгружаются css, вся графика и javascript). Не знаю, что было не так со старым хостингом, во время которого проходила индексация, но правила реврайтов для SEF .htaccess
были стандартные для движка joomla:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) /index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
В общем, ждать, пока поисковики заново проиндексируют весь сайт, как бы не тема, поэтому сработал вот такой вариант:
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
Эти 2 строки, помещённые перед секцией SEF в .htaccess
, удаляют index.php
из URL и делают постоянный редирект на URL, и приводит к стандартному виду ЧПУ Joomla.