Главная Полезности Хорошие истории Забавности Отдых Кино Музыка Блокнот

Редирект с помощью .htaccess

.htaccess как организовать простой 301 редирект с одной страницы на другую

Простой 301 редирект через htaccess с одной страницы на другую создается через конструкцию:

Redirect 301 /старый_урл_без_домена http://www.новый_урл_в_полном_виде.ru/

Например:

Redirect 301 /doka/htaccess/ http://www.jump-marketing.ru/doka/htaccess1/

.htaccess как организовать 301 редирект если в url есть знак вопроса

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

Если знак вопроса идет после слова, например /index.php?SECT_ID=150 тогда:

# Находим в URL адресе совпадение (уникальная, которая есть только в этом урле)
RewriteCond %{QUERY_STRING} ^SECT_ID=150$
# Теперь проверяем есть ли в начале index.php и делаем редирект, если есть
RewriteRule ^index\.php$ http://www.адрес_куда_делать_редирект/? [L,R=301]

Если знак вопроса идет после слеша (/product/?IBLOCK_ID=26&SECT_ID=150), то верхний метод работать не будет. Можно использовать следующий:

# Находим в урле уникальный фрашмент и если нашли, делаем редирект
RewriteCond %{QUERY_STRING} ^IBLOCK_ID=26&SECT_ID=150
# Перенаправляем все урлы, где есть этот фрагмент на новый адрес
RewriteRule (.*) http://www.адрес_куда_делать_редирект/? [L,R=301]

.htaccess 301 редирект на страницы без слеша на конце со страниц со слешем

Убрать слеш из окончаний урлов можно следующей конструкцией:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$  /$1 [R=301,L]

.htaccess как организовать 301 редирект с домена без www на домен с www

Для огранизации склейки доменов с www и без www с принудительным добавлением www, используется конструкция:

RewriteCond %{HTTP_HOST} ^домен.ru$ [NC]
RewriteRule ^(.*)$ http://www.домен.ru/$1 [R=301,L]

Обратный редирект с принудительным удалением www из адреса:

RewriteCond %{HTTP_HOST} ^www.домен.ru$ [NC]
RewriteRule ^(.*)$ http://домен.ru/$1 [R=301,L]

.htaccess принудительное добавление слеша в конец URL с 301 редиректом

Если требуется склеить адреса которые заканчиваются на слеш и без него с принудительным добавлением / в конце урла, то необходимо использовать следующую конструкцию:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Источник: Jump-Marketing