Advertisement
Trigub_Ilia

301-редирект в файле .htaccess

Dec 11th, 2018
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.06 KB | None | 0 0
  1. Ниже даны наиболее используемые правила настройки файла .htaccess для 301-редиректа. Лучше размещать все правила после двух строк:
  2.  
  3. Options +FollowSymLinks
  4. RewriteEngine On
  5.  
  6. Комментарий в файле обозначается символом решётка «#» в начале строки #
  7. # Текстовый комментарий, данная строчка не будет обрабатываться.
  8.  
  9. 301-редирект с домена без WWW на домен с WWW префиксом #
  10. RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
  11. RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
  12.  
  13. С домена с WWW префиксом на без #
  14. RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
  15. RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
  16.  
  17. Для HTTPS-версии:
  18.  
  19. RewriteCond %{SERVER_PORT} ^80$ [OR]
  20. RewriteCond %{HTTP} =on
  21. RewriteRule ^(.*)$ https://pixelplus.ru/$1 [R=301,L]
  22.  
  23. Стандартная переадресация с одной статической страницы на другую #
  24. Redirect 301 /was.php http://www.site.ru/new.php
  25.  
  26. При этом, новый адрес указывать необходимо полностью с http и доменным именем.
  27.  
  28. В ряде случаев полезна переадресация через RewriteRule #
  29. RewriteRule ^dir /dir-new/$1 [R=301,L]
  30.  
  31. 301-редирект для страницы с GET параметрами #
  32. Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
  33.  
  34. RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ [NC]
  35. RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
  36.  
  37. Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:
  38.  
  39. RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ [NC]
  40. RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
  41.  
  42. 301-редирект со страницы без заданного параметра в корень #
  43. Если адрес имеет следующий вид: http://www.site.ru/?abc то для перенаправления подойдет последовательность строчек:
  44.  
  45. RewriteCond %{QUERY_STRING} ^abc$ [NC]
  46. RewriteRule ^$ /? [R=301,L]
  47.  
  48. 301-редирект для конкретного файла, а не целой папки #
  49. Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.
  50.  
  51. RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]
  52.  
  53. Как быть с доменами в зоне РФ? #
  54. Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф преобразуется в .xn--p1ai.
  55.  
  56. 301-редирект с домена на домен #
  57. RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
  58. RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
  59.  
  60. И для домена в зоне РФ:
  61.  
  62. RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
  63. RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
  64.  
  65. Настройка переадресации на папки со слешем в конце / #
  66. RewriteCond %{REQUEST_FILENAME} !-f
  67. RewriteCond %{REQUEST_URI} !\..{1,10}$
  68. RewriteCond %{REQUEST_URI} !(.*)/$
  69. RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
  70.  
  71. Настройка переадресации на папки без слеша (убираем слеш в конце) #
  72. RewriteCond %{REQUEST_FILENAME} !-d
  73. RewriteCond %{REQUEST_URI} ^(.+)/$
  74. RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
  75.  
  76. 301-редирект с домена на папку на другом домене #
  77. RewriteCond %{HTTP_HOST} ^si-te\.ru$ [NC]
  78. RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
  79.  
  80. Редирект со всех файлов домена, кроме папки администратора bitrix #
  81. RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
  82. RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
  83.  
  84. Редирект всех файлов в папке на заданный файл #
  85. RewriteRule ^dir(.*)$ /new-file.php [L,R=301]
  86.  
  87. Редирект файлов из заданной папки кроме, определенного файла #
  88. RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301]
  89. RewriteRule ^dir(.*)$ /all.php [L,R=301]
  90.  
  91. Смена страниц с html расширения на php расширение #
  92. RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php
  93.  
  94. Перенос картинок / изображений из папки /img/ на поддомен #
  95. RewriteRule ^img/(.+)\.jpg$ http://img.domain.ru/$1.jpg [R=301,L]
  96.  
  97. Задание типа индексной страницы (php, html, htm и другие) #
  98. Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
  99.  
  100. DirectoryIndex index.html index.php index.htm index.shtml
  101.  
  102. Редирект с индексной страницы php на саму папку (корень) #
  103. RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
  104. RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
  105.  
  106. Для всех индексных страниц на сайте:
  107. RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
  108.  
  109. Редирект с поддомена на основной домен второго уровня #
  110. RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC]
  111. RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA]
  112.  
  113. Редирект для заданного файла в различных директориях (папках) #
  114. RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
  115.  
  116. Код позволяет поставить 301-редирект со всех папок вида http://site.ru/***/uniqe-file.html на один файл в корне /unique-file.html. Бывает полезен при переделке сайта и изменении ссылок.
  117.  
  118. Если требуется создать ЧПУ-копию какой-либо динамической страницы, то это можно также реализовать с помощью .htaccess. #
  119. RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]
  120.  
  121. Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/
  122.  
  123. 301-редирект с HTTPS-версии на HTTP #
  124. RewriteCond %{HTTPS} "on"
  125. RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
  126.  
  127. Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.
  128.  
  129. Перенос сайта на версию с HTTPS (для всех страниц) #
  130. RewriteCond %{SERVER_PORT} ^80$ [OR]
  131. RewriteCond %{HTTP} =on
  132. RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
  133.  
  134. Настройка 403 кода ответа сервера для реф-спама (301-редирект для спама по REFERER) для списка ресурсов #
  135. RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]
  136. RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
  137. RewriteRule .* - [F]
  138.  
  139. Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER.
  140.  
  141. Указание пути к файлу 404 ошибки с помощью .htaccess #
  142. Внимание, важно чтобы код ответа сервера для 404 ошибки был именно 404. Путь к файлу указывается с помощью следующей строчки:
  143.  
  144. ErrorDocument 404 /404-for-me.php
  145.  
  146. ! Все правила выполняются в прямом порядке их следования в файле .htaccess и правило, написанное позже, и будет выполняться позже.
  147.  
  148. ! Для сайтов, на которых используется не сервер Apache, аналогичные 301-редиректы легко настраиваются с помощью PHP.
  149.  
  150. <?php
  151. header("HTTP/1.1 301 Moved Permanently");
  152. header("Location: http://www.site.ru/dir/");
  153. exit();
  154. ?>
  155.  
  156. ! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.
  157.  
  158. Если требуется настроить редирект только для некоторых USER_AGENT'ов, а не для всех пользователей #
  159. RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone) [NC]
  160. RewriteRule (.*) http://mobile.site.ru/ [L,R=301]
  161.  
  162. Если требуется настроить редирект для всех поисковых роботов (представлен список их USER_AGENT'ов) #
  163. RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]
  164. RewriteRule (.*) http://no-search.site.ru/ [L,R=301]
  165.  
  166. Несколько простых примеров #
  167. Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/
  168. RewriteCond %{QUERY_STRING} ^view=featured$ [NC]
  169. RewriteRule ^component/content/$ /? [R=301,L]
  170.  
  171. Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/
  172. RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC]
  173. RewriteRule ^index\.php$ /? [R=301,L]
  174.  
  175. Синтаксис для регулярных выражений #
  176. . — Точка заменяет произвольный символ.
  177. [abc] — обозначает перечень символов, совпадающих с буквами a, b, или с.
  178. [^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
  179. * — означает, что предшествующий символ может повторяться (0 или более раз).
  180. [abc]* — команда найдёт идущие подряд символы из заданного набора.
  181. [^abc]* — с точностью до наоборот.
  182.  
  183. .* — заменяет абсолютно любой набор символов. ".*" — найдёт все подстроки между кавычками.
  184. ^ — начало строки (в том случае, если используется в начале выражения).
  185. $ — обозначает конец строки.
  186.  
  187. \w — буква, цифра или подчёркивание _.
  188. \d — заменяет любую цифру.
  189. \D — заменяет любой символ, но не цифру.
  190. [0-9] — заменяет любую цифру.
  191. [a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
  192. [A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
  193. [a-zA-Z] — любая буква от a до Z в любом регистре.
  194. [a-Z] — то же самое.
  195. Убираем все GET-параметры после знака вопроса (?) #
  196. RewriteRule (.*) $1? [R=301,L]
  197. Располагать после: RewriteBase /
  198.  
  199.  
  200. ПАМЯТКА ПО ИСПОЛЬЗУЕМЫМ СИМВОЛАМ И ОБОЗНАЧЕНИЯМ
  201. Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
  202.  
  203. Спецсимволы, используемые в правилах и их значения.
  204.  
  205. ^ — спецсимвол начала строки;
  206. $ — спецсимвол конца строки;
  207. ! — спецсимвол отрицания;
  208. . — точка, заменяет любой символ, но только один;
  209. () — группировка;
  210. \ — «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом;
  211. # — начало текстового комментария в файле.
  212. Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
  213.  
  214. ? — символ повторяется 0 или 1 раз.
  215. + — повторяется от 1 до 65536 раз.
  216. * — повторяется от 0 до 65536 раз.
  217. Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
  218.  
  219. NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
  220. R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
  221. L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement