SPIP & htaccess. Примеры использования.

Несколько стандартных примеров по использованию htaccess в первую очередь для редиректов в SPIP. В целом, примеры достаточно банальные и распространенные, что бы делать еще один список примеров, но с другой стороны некоторые задачи характерны только для SPIP. И их реализация требует хороших знаний ModRewrite или спортивных навыков по гуглению.

Перенаправление со старых ссылок на новые

В основном мы применяем редиректы при редизайне сайта. Редизайн обычно сопровождается сменой системы управления сайтом. Как следствие полностью меняются ссылки на страницы (URL). Но если сайт старый, то большая часть его страниц уже проиндексирована. Если сделать бездумную смену сайта, то пользователи, перейдя по старой ссылке увидят сообщение об ошибке. Редиректами старых страниц на новые мы можем этого избежать.

Пример №1

Перенаправить c: http://domain.com/Glavnaya.html

Перенаправить на: http://domain.com/

Redirect  301  /Glavnaya.html  /

Пример №2

Перенаправить c: http://domain.com/tehnology

Перенаправить на: http://domain.com/spip.php?rubrique6

RedirectMatch  301   ^/tehnology$   /spip.php?rubrique6

Пример №3

Перенаправить c: http://domain.com/tehnology/36

Перенаправить на: http://domain.com/spip.php?article23

RedirectMatch  301  ^/tehnology/36$  /spip.php?article23

Пример №4

Перенаправить c: http://domain.com/2009?func=viewcategory&catid=5

Перенаправить на: http://domain.com/spip.php?article29

Вариант №1
RedirectMatch  301  ^2009?func=viewcategory&catid=5$  /spip.php?article29

Вариант№2

RewriteCond %{QUERY_STRING}        ^func=viewcategory&catid=5$
RewriteRule ^spip\.php$ /spip.php?article29 [L,R=301]

Пример №5

Перенаправить c: http://domain.com/index.php?page=chi-siamo.html

Перенаправить на: http://domain.com/?lang=it

RewriteCond %{QUERY_STRING} .chi-siamo\.html$
RewriteRule ^index\.php$ ?lang=it [L,R=301]

Боремся с дублированием контента

Пример №1

Особенно часто встречается, если мы выполнили перенос сайта с Joomla или подобной CMS, когда в индексе поисковика ссылка на главную страницу сохранилась ввиде http://domain.com/index.php, а нам надо завернуть ее на главную.

Перенаправить c: http://domain.com/index.php (index.html)

Перенаправить на: http://domain.com/

RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html)\ HTTP
RewriteRule ^(.*)index\.(php|html)$ /$1 [R=301,L]

Пример №2

В силу архитектуры многоязычных сайтов часто дублируется ссылка на главную страницу со ссылкой на языковую версию. Т.е. если у нас есть сайт http://domain.com, основной язык сайта русский, то главная страница будет доступна по двум ссылкам http://domain.com и http://domain.com/?lang=ru.

Перенаправить c: http://domain.com/?lang=ru

Перенаправить на: http://domain.com/

RewriteCond %{QUERY_STRING}  ^lang=ru.*$
RewriteRule ^  /? [R=301,L]

Мелкие красивости

Пример 1. Ссылка /?lang=ru

И снова многоязычные сайты. Ссылка вида http://domain.com/?lang=ru функциональна, но не красива. Куда симпатичнее будет ссылка вида http://domain.com/ru.

Для этого в самом шаблоне SPIP все ссылки прописываем в таком формате #URL_SITE_SPIP#LANG, вместо #URL_SITE_SPIP?page=#LANG, а в многострадальном htaccess делаем такую запись

RewriteRule  ru$  /?lang=ru [QSA,L]

Пример 2. Прямая ссылка на нестандартный шаблон

Перенаправить c: http://domain.com/cart

Перенаправить на: http://domain.com/?page=cart

RewriteRule ^cart$      spip.php?page=cart [QSA,L]

Сайт на нескольких языках с несколькими доменами

Предположим, у нас есть сайт с двумя языковыми версиями - английской и русской. И два домена domain.com и domain.ru для каждой версии соответственно.
Нас необходимо, что бы при заходе domain.com мы попадали строго на английскую версию сайта.

Для этого в настройках хостинга мы указываем домен domain.com как alias к domain.ru ( или как domain pointer) и добавляем следующее правило для mod_rewrite:

RewriteCond %{HTTP_HOST}  ^www.domain\.com$
RewriteRule (.*) http://domain.ru/spip.php?lang=en [QSA,L]
наверх