====== Настройка переадресации ======
\\
\\
===== 301 редирект с одного сайта на другой =====
Предположим мы хотим при запросе нашего сайта переадресовать пользователя на другой URL, для этого нам необходимо в корневую директорию сайта добавить файл .htaccess со следующим содержимым:
Redirect 301 / http://example.com/
Более сложный вариант:
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://example.com/ [L,R=301]
\\
\\
===== 301 редирект с одной страницы на другую =====
Настройка переадресации для одного файла:
Redirect 301 /file.html http://example.com/file.html
Более сложный пример, мы хотим определенные страницы нашего сайта переадресовывать на другие сайты
Redirect /linux http://www.linux.org
Redirect /linux/download.html http://www.linux.org/dist/download_info.html
Redirect 301 /kernel http://www.linux.org
\\
----
\\
===== 301 редирект каждой страницы одного домена на такой же адрес другого =====
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
\\
----
\\
===== 301 редирект С WWW на без www =====
RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]
\\
----
\\
===== 301 редирект С БЕЗ WWW на www =====
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
\\
----
\\
===== 301 редирект со страниц со слешем на без слеша (весь сайт) =====
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
\\
----
\\
===== 301 редирект со страниц без слеша на слеш =====
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
\\
----
\\
===== Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы =====
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]
\\
----
\\
===== Один (а не два последовательных!) 301 редирект НА С WWW и со слешем на конце адреса страницы =====
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
\\
----
\\
===== Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы =====
RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]
\\
----
\\
===== Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы =====
RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]
\\
----
\\
===== 301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru =====
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ http://site.ru/? [R=301,L]
\\
----
\\
===== 301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php) =====
Пример: \\
''site.ru/index.php?n=1 на site.ru/?n=1''
RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://site.ru/ [R=301,L]
\\
----
\\
===== Редирект с протокола http на https =====
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
\\
----
\\
===== Редирект с протокола https на http. =====
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
\\
----
\\
===== RedirectMatch =====
Директива **RedirectMatch** аналогична директиве **Redirect** за исключением того, что в **RedirectMatch** возможно использование регулярных выражений, что, несомненно, может быть удобно в некоторых условиях. Например, для организации передачи параметров скрипту в теле URL.
RedirectMatch /(.*)/(.*)/index.html$ http://mysite.ru/script.php?par1=$1&par2=$2
В регулярном выражении можно использовать любые печатные символы и пробел, но часть символов имеет особое значение:
^ Выражение ^ Значение ^
| **%%()%%** | %%используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.%% |
| **%%^%%** | %%обозначает начало строки.%% |
| **%%$%%** | %%обозначает конец строки.%% |
| **%%.%%** | %%обозначает любой символ.%% |
| **%%|%%** | %%обозначает альтернативу. Например, выражения "A|B" означают "A или B".%% |
| **%%?%%** | %%ставится после символа (группы), который может как присутствовать, так и отсутствовать.%% |
| **%%*%%** | %%ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.%% |
| **%%+%%** | %%действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.%% |
| **%%[]%%** | %%используются для перечисления допустимых символов.%% |
| **%%[^]%%** | %%используются для перечисления недоступных символов.%% |
| **%%\%%** | %%ставится перед спецсимволами, если они нужны в своем первозданном виде.%% |
| **%%#%%** | %%Все, что расположено после символа '#', считается комментарием.%% |
\\
----
\\
====== Источники ======
[[http://web-optimizator.com/301-redirekt-htaccess/|Источник1]]
[[https://beget.ru/articles/htaccess/|Источник2]]