Настройка htaccess
Область действия директив .htaccess - Правила работают в каталоге с файлом и во всех дочерних каталога. Если нужно создать правило для дочернего каталога, создаем в нем дополнительный файл .htaccess с правилами.
Готовые варианты скриптов
Перед использованием примеров должны быть строки:
#используем mod_rewrite
RewriteEngine on
RewriteBase /
Это подключает модуль mod_rewrite. Если вы редактируете .htaccess у CMS, то скорее всего строки уже есть.
# 301 редирект
RewriteRule ^about/$ /about/personal/ [R=301,L]
Перенаправляет http://new-site.com/about/ -> http://new-site.com /about/personal/
Если нужен временный 302 редирект меняем [R=301,L] на [R=302,L].
# добавляем www
RewriteCond %{HTTP_HOST} !^ www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# убираем www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Добавляем слеш в конце сроки
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]
# 301 редирект по наличию параметра в url
RewriteCond %{QUERY_STRING} SECTION_ID=210
RewriteRule ^(.*)$ /about/personal/? [R=301,L]
RewriteCond %{QUERY_STRING} SECTION_ID=210 - проверяем есть ли параметр SECTION_ID=210Перенаправляет http://new-site.com/?SECITON_ID=210 -> http://new-site.com /about/personal/
# Убрать index.php из url.
RewriteRule ^index.php$ / [QSA,R]
Рекомендации по использованию правил htaccess
- Желательно избегать использование в правилах доменного имени.
RewriteRule ^about/$ http://new-site.com/about/personal/ [R=301,L]
Данный пример можно сократить до более универсального:
RewriteRule ^about/$ /about/personal/ [R=301,L] - Использование регулярных выражений для уменьшения объема кода и упрощения его понимания.
Строки
RewriteRule ^category/3230/ http://new-site.com/category/3230/ [R=301,L]
RewriteRule ^category/3231/ http://new-site.com/category/3231/ [R=301,L]
RewriteRule ^category/3232/ http://new-site.com/category/3232/ [R=301,L]
Можно заменить на
RewriteRule ^category/([0-9]+)/$ /category/$1/ [R=301,L]
где ([0-9]+) - регулярное выражение по поиску содержащих цифры подстроку;
$1 - переменная для подстановки этой подстроки;
Если правила не работают
- Проверить работает ли .htaccess. Все вышеописанные редиректы используют модуль apache mod_rewrite . Можно организовать редиректы без его использования. Первой строкой пишем:
Redirect 301 /about.html http://new-site.com/about
Этот метод не позволяет использовать условия при написании редиректов, поэтому его используем если mod_rewrite не установлен. - Если предыдущая строка тоже не работает, ищем возможность создать редиректы через хостинг панель. Параллельно смотрим, поддерживает ли хостинг .htaccess.
- Если на хостинге заявлена поддержка . htaccess и вы уверены что все делаете правильно - напишите в техподдержку хостинга. Возможно есть какие-то тонкости (например установлен модуль frontpage).
Для тестов несложных правил - http://martinmelin.se/rewrite-rule-tester/