Несколько стандартных примеров по использованию 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]Перенаправить 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]