Настройка файла htaccess

Настройка 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

  1. Желательно избегать использование в правилах доменного имени. 
    RewriteRule ^about/$ http://new-site.com/about/personal/ [R=301,L]
    Данный пример можно сократить до более универсального:
    RewriteRule ^about/$ /about/personal/ [R=301,L]
  2. Использование регулярных выражений для уменьшения объема кода и упрощения его понимания.
    Строки 
    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 - переменная для подстановки этой подстроки;

Если правила не работают

  1. Проверить работает ли .htaccess. Все вышеописанные редиректы используют модуль apache mod_rewrite . Можно организовать редиректы без его использования. Первой строкой пишем:
    Redirect 301 /about.html http://new-site.com/about
    Этот метод не позволяет использовать условия при написании редиректов, поэтому его используем если  mod_rewrite не установлен.
  2. Если предыдущая строка тоже не работает, ищем возможность создать редиректы через хостинг панель. Параллельно смотрим, поддерживает ли хостинг .htaccess.
  3. Если на хостинге заявлена поддержка . htaccess и вы уверены что все делаете правильно - напишите в техподдержку хостинга. Возможно есть какие-то тонкости (например установлен модуль frontpage).
Для тестов несложных правил - http://martinmelin.se/rewrite-rule-tester/