Записи помеченные ‘ЧПУ’

Переадресация (редирект) страниц с переменными

Если нужно сделать в .htaccess постоянную переадресацию со страницы с параметрами, передающимися после знака вопроса, на другую страницу (например, страниц, проиндексированных без ЧПУ, на страницы с ЧПУ), то обычный редирект работать не будет.
Вот обычный редирект:

Redirect 301 /folder/subfolder http://example.com/newfolder

Но если, к примеру, нам нужно переадресовать страницу вроде такой http://example.com/index.php?option=com_ex1&task=ex2&category_id=111&Itemid=222 на страницу http://example.com/newfolder, то придётся применять rewrite таким образом:

RewriteCond %{QUERY_STRING} ^option=com_ex1&task=ex2&category_id=111&Itemid=222$
RewriteRule ^index.php$ http://example.com/newfolder? [R=301,L]

Убрать лишний index.php из .htaccess

После переноса сайта с одного хостинга на другой пришлось столкнуться с проблемой, решение которой отняло чуть больше времени, чем обычно. Поэтому излагаю её здесь.

Суть проблемы:
Есть сайт на 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.