Склейка доменов .htaccess

Опубликовано: 19 Апр 2015

Взято отсюда.

Что такое склейка доменов? Это когда в адресной строке мы вводим domain2.ru, нас перекидывает на страницу domain.ru, при этом может быть несколько доменов ссылающихся на один основной. Также часто бывает необходимо настроить переадресацию с www.domain.ru -> domain.ru или наоборот. Как делать такие вещи рассмотрим далее.

В .htaccess обязательно должна присутствовать следующая конструкция:

Options +FollowSymlinks
RewriteEngine On

Далее примеры, их можно копировать и менять на свои домены.

Редирект с www.domain.ru на domain.ru (с www на без www)

RewriteCond %{HTTP_HOST} ^www.mymodx.ru
RewriteRule ^(.*)$ http://mymodx.ru/$1 [R=permanent,L]

Редирект с domain.ru на www.domain.ru (без www на с www)

RewriteCond %{HTTP_HOST} ^mymodx.ru
RewriteRule ^(.*)$ http://www.mymodx.ru/$1 [R=permanent,L]

Склейка нескольких доменов на один. По адресу domain1.ru, domain2.ru будет открываться (происходить редирект) domain.ru

RewriteCond %{HTTP_HOST} ^domain1.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain1.ru$ [OR]
RewriteCond %{HTTP_HOST} ^domain2.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain2.ru$
RewriteRule ^(.*)$ http://domain.ru/$1 [R=301,L]

Как же нам быть, если нужно склеить кирилические домены вида моймодыкс.рф с mymodx.ru? А все оказывается просто, нежно перекодировать кирилический домен в кодировку Punycode (моймодыкс.рф ==> xn--d1ajefbkc0a2g.xn--p1ai)

Редирект с кириллического домена на латинский.

RewriteCond %{HTTP_HOST} ^xn--d1ajefbkc0a2g.xn--p1ai$
RewriteRule ^(.*)$ http://mymodx.ru/$1 [R=301,L]

Кстати есть замечательный сервис, который предназначен для преобразования русских доменных имён (или другой строки) в кодировку Punycode, которая используется в многоязычной системе доменных имён. Возможно прямое и обратное преобразование.

Перенаправляет с www.site.ru/index.php на страницу www.site.ru. Если есть параметры (index.php?id=etc) не перенаправляет.

RewriteEngine on
RewriteBase /
Options +FollowSymlinks
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Если вдруг не получается при помощи .htaccess сделать 301 редирект со страниц со слешем, на страницы без слеша на конце предлагаю собственный универсальный вариант реализованый на php, вставлять в самое начало index.php.

if($_SERVER['REQUEST_URI'][strlen($_SERVER['REQUEST_URI'])-1] == "/" && $_SERVER['REQUEST_URI'] != "/") {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://".$_SERVER['HTTP_HOST'].substr($_SERVER['REQUEST_URI'], 0, strlen($_SERVER['REQUEST_URI']) - 1));
}

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: