Перенаправление средствами Apache Redirect RedirectMatch примеры

Если Вы задумаете перенести какую то часть Вашего сайта из одного каталога в другой, либо, просто, смените название того или иного скрипта, HTML страницы, Вам наверняка захочется чтобы пользователи, привыкшие к старым адресам – путям по сайту, не оказались один на один с ошибкой 404 (страница не найдена).

Для решения задачи перенаправления, отлично подойдут средства предоставляемые веб сервером Apache.
Конкретно, это можно реализовать с помощью файла .htaccess и директив Redirect или RedirectMatch.

Чем отличаются данные директивы?
Redirect используется для единичного, конкретного перенаправления. Например если страница называлась pageA.html и была переименована в pageB.html в .htaccess следует прописать:

Redirect /pageA.html http://vash-site.ru/pageB.html

vash-site.ru следует заменить на имя Вашего домена.
Впрочем, как видим из примера выше, с помощью директивы Redirect  можно перенаправлять на внешний сайт (другого, отличного от Вашего, домена).

Тот же пример с редиректом каталога:

Redirect /directoryA http://vash-site.ru/directoryB

При реализации этого примера, если пользователь обращается к странице page.html или каталога (папки) directoryA, то он будет отправлен на страницу http://vash-site.ru/directoryB/page.html
Не забываете , что директива Redirect зависит от регистра, то есть – большие и маленькие буквы для неё совершенно различны (directoryA не тоже самое, что и directorya).

Ещё одной родственной директивой веб сервера Apache, для перенаправления является директива RedirectMatch.

RedirectMatch поддерживает перенаправление с использованием более сложного алгоритма регулярных выражений.

RedirectMatch /directoryA/(.*)\.php$ http://vash-site.ru/directoryB/$1.php

Приведенный выше пример запускает перенаправление из директории A в директорию B только при обращении к PHP скриптам.
http://vash-site.ru/directoryA/page.php -> http://vash-site.ru/directoryB/page.php
но
http://vash-site.ru/directoryB/page.html <- перенаправление не произойдёт
Регулярные выражения заслуживают, конечно, отдельной статьи или даже книги. Скажем вкратце, что в вышеприведенном примере:
(.*)
отвечает за любой символ;
точка экранирована косой чертой (точку в регулярных выражениях всегда следует экранировать обратным слешом \.);
знак доллара, в конце первой части выражения, говорит о завершении шаблона выражения ($ – указывает конец строки);
знак доллара и единица $1 (во второй части выражения) являет собой ссылку на любые символы, указанные ранее с помощью (.*)

Как перенаправить посетителей, обращающийся к любым файлам в подкатегории, с помощью RadirectMatch?
Это осуществляется следующим образом:

RedirectMatch /directoryA/.* http://vash-site.ru/directoryB/

Что ещё полезно знать о Radirect и RedirectMatch? Параметр permanent, с помощью которого Вы можете сообщить поисковым системам о том, что ресурс перемещен навсегда (HTTP код 301):

RedirectMatch permanent /directoryA/.* http://vash-site.ru/directoryB/

Другие параметры:
temp – временное перемещение (код состояния сервера 302)
gone – ресурс полностью удален (код 410)
seeother – ресурс заменен (код 303)

Опубликовано 26.08.2013 в 14:56 · Автор Вебдизайнеру, сисадмину, вебмастеру · Ссылка
Рубрики: Настройки хостинга, Поисковая оптимизация, Системное администрирование · Теги: , , , , , , , , , , , ,