====== Настройка переадресации ====== \\ \\ ===== 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]]