Делаем редирект на сайте через файл .htaccess

Главная Блог СтатьиДелаем редирект на сайте через файл .htaccess
Делаем редирект на сайте через файл .htaccess
14 09/13
htaccess — идеальный и безопасный инструмент для организации редиректа страниц внутри сайта.
  • Автор: Бунеев Алексей
  • Просмотров: 1141

Для чего нужен файл .htaccess?

.htaccess — это специальный файл веб-сервера Apache, в котором записаны инструкции для управления поведением сервера в этой папке, и во всех вложенных (если в них отсутствуют свои файлы .htaccess).

Данный файл является идеальным и безопасным инструментом для организации редиректа (перенаправления) страниц внутри сайта. 

Это актуально для seo продвижения сайта, когда после разработки сайта или обновления информационной структуры сайта изменились URL-адреса страниц — были перемещены в другой раздел, удалены или просто по иному названы. 

Также перенаправление актуально, если требуется перенаправить пользователя на другой домен, например, на дубликат в другой доменной зоне или требуется установить HTTPS-протокол.

Все эти работы необходимы для того, чтобы у пользователей или роботов поисковых систем не возникали ошибки при обращении к страницам сайта. Это обязательно положительно скажется на оптимизации сайта для поисковых систем и продвижении сайта в целом.

Способы осуществления редиректа через файл .htaccess

Для осуществления на сайте редиректа через файл .htaccess, можно использовать любую из трех директив Apache: 

  • Redirect;
  • RedirectMatch;
  • RewriteRule.

Правила использования директивы Redirect

	 Redirect [status] URL-path URL-to-redirect

status — это статус кода состояния HTTP (вид перенаправления) в виде трех цифр. Первая цифра указывает на класс состояния: 3xx — Redirection (перенаправление).

Примеры статусов кода состояния HTTP класса Redirection (перенаправления):

  • 300 Multiple Choices - Множество выборов;
  • 301 Moved Permanently - Перемещено навсегда;
  • 302 Moved Temporarily - Перемещено временно;
  • 303 See Other - Смотреть другое;
  • 304 Not Modified - Не изменялось;
  • 305 Use Proxy - Использовать прокси;
  • 306 Зарезервировано - код использовался только в ранних спецификациях;
  • 307 Temporary Redirect - временное перенаправление.

Наиболее часто используются коды 301 и 302 перемещение навсегда или перемещение временно.

URL-path — часть запрашиваемого пользователем или поисковой системой адреса, которая должна обязательно начинаться со слэша «/».

  • Если URL-path заканчивается не слэшем, то редирект будет срабатывать только в случае точного совпадения запрошенного пользователем адреса и URL-path.
  • Если URL-path заканчивается слэшем, то редирект сработает не только для указанного адреса, но и для всех, которые начинаются на указанный адрес. А к URL-to-redirect будет добавлена часть адреса, следующая за последним указанным слэшем в URL-path.

URL-to-redirect — полный адрес сайта, конкретной страницы или раздела, на который будет осуществляться перенаправление. При этом должен присутствовать протокол (http:// или https://) и закрывающий адрес сайта знак «/».

Правила использования директивы RedirectMatch

	 RedirectMatch [status] URL-regexp URL-to-redirect

Действие директивы RedirectMatch аналогично Redirect. Отличие заключается в том, что в параметрах URL-regexp и URL-to-redirect можно использовать регулярные выражения.

Специальные символы используемые в регулярных выражениях

  • Точка «.» — подразумевается наличие любого символа.
  • Круглые скобки «()» — все, что в них находится в первом выражении, записывается в специальные переменные $1, $2, $3, и т. д. подряд, в порядке встречи скобок. Далее переменные можно использовать во втором выражении.
  • Квадратные скобки «[]» — все, что в них находится, это так называемый список перечисления. Например: запись [0–9] — означает наличие одной цифры, [a-z] — любую маленькую латинскую букву, а [A-Za-z_-] — любую латинскую букву, знак подчеркивания или прочерк.
  • Вопросительный знак «?» — означает, что символ перед ним или выражение, если оно заключено в круглые или квадратные скобки, может присутствовать, а может и не присутствовать. А если вместо вопросительного знака «?» поставить знак звездочка «*», то символ или выражение в скобках может присутствовать несколько раз, а может и не присутствовать вовсе.
  • Знак степени «^» — означает начало строки, а знак доллар «$» — ее конец.
  • Обратный слэш «\» — если необходимо, чтобы какой-либо специальный символ был применен по его прямому назначению (то есть, чтобы точка стала точкой, а не любым символом), то перед этим символом ставится этот специальный символ «\» . И, соответственно, чтобы обратный слэш им и остался, перед ним так же необходимо поставить этот спецсимвол.

Правила использования директивы RewriteRule

	 RewriteEngine on #Должно быть включено для работы RewriteRule 
RewriteRule URL-regexp URL-to-redirect [L,R[=status]]

У директивы RewriteRule более широкий спектр применения, который, в числе прочих возможностей, разрешает ее использование для перенаправления флагов L (выполнить немедленно) и R (редирект). Флаги L и R указываются в конце строки в квадратных скобках «[]».

Правила использования директивы RewriteRule вместе с RewriteCond

	 RewriteEngine on #Должно быть включено для работы RewriteRule
RewriteCond %{NAME_OF_VARIABLE} URL
RewriteRule URL-regexp URL-to-redirect [L,R[=status]]

Директива RewriteCond определяет условия для какого-либо правила. Перед директивой RewriteRule располагаются одна или несколько директив RewriteCond. Следующее за ними правило преобразования используется только тогда, когда URLсоответствует условиям этой директивы и также условиям этих дополнительных директив.

Переменные сервера %{NAME_OF_VARIABLE} — переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP.

Пример редиректа в файле .htaccess

Внимание! Перед вставкой скопированного кода в файл .htaccess, отредактируйте его в блокноте или другой программе.

	 Options +FollowSymLinks
	 RewriteEngine On 
#Redirect http -> https RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
#Redirect host.ru -> www.host.ru RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
#редирект site1.ru / www.site1.ru-> www.site2.ru RewriteCond %{HTTP_HOST} site1.ru [OR] RewriteCond %{HTTP_HOST} www.site1.ru RewriteRule (.*) http://www.site2.ru/$1 [R=301,L]
#Redirect www.site.ru/URL/* -> www.site.ru RedirectMatch 301 ^(.*)/page.php(.*)$ http://www.site.ru/ RedirectMatch 301 ^(.*)/category/(.*)$ http://www.site.ru/
#Redirect www.site.ru/category1/* -> www.site.ru/category2/* RedirectMatch 301 ^/category1/(.*)$ http://www.site.ru/category2/$1
#Redirect www.site.ru/.../category1/* -> www.site.ru/.../category2/* RedirectMatch 301 ^(.*)/category1/(.*)$ http://www.site.ru$1/category2/$2 #Redirect www.site.ru/.../page1/ -> www.site.ru/.../page2/ RedirectMatch 301 ^(.*)/page1/$ http://www.site.ru$1/page2/
#Redirect www.site.ru/page1/ -> www.site.ru/page2/ RewriteCond %{REQUEST_URI} ^/каталог/itemlist/category/25-detekotry-i-schyotchiki-banknot.html$ RewriteRule .* /catalog/bank-equipment/? [R=301,L]
#Url Rewrite Bitrix (Подключение ЧПУ Битрикс) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
#Redirect /news/123 -> /news/123/ RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L] RewriteCond %{REQUEST_URI} ^(.*)/$ RewriteRule .* - [L]
#Redirect /news/index.php -> /news/ RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule .* - [L] RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_URI} ^(.*)/index.php$ RewriteRule ^(.*)$ %1/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_FILENAME} [\xC2-\xDF][\x80-\xBF] [OR] RewriteCond %{REQUEST_FILENAME} \xE0[\xA0-\xBF][\x80-\xBF] [OR] RewriteCond %{REQUEST_FILENAME} [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} [OR] RewriteCond %{REQUEST_FILENAME} \xED[\x80-\x9F][\x80-\xBF] [OR] RewriteCond %{REQUEST_FILENAME} \xF0[\x90-\xBF][\x80-\xBF]{2} [OR] RewriteCond %{REQUEST_FILENAME} [\xF1-\xF3][\x80-\xBF]{3} [OR] RewriteCond %{REQUEST_FILENAME} \xF4[\x80-\x8F][\x80-\xBF]{2} RewriteCond %{REQUEST_FILENAME} !/bitrix/virtual_file_system.php$ RewriteRule ^(.*)$ /bitrix/virtual_file_system.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]

Возврат к списку