Пиша тази статия като продължение на Приложна магия с mod_rewrite в htaccess
Пренасочване на домейн
Както вече писах в статията Често срещани SEO грешки на бизнес сайтове в точка 2. Създаване на огледални сайтове често срещан проблем е повече от един URL адрес да сочи едно и също съдържание. Освен описания случай в статията, много често се случва нова фирма да купи няколко нови домейна като например targovskamarka.com, targovskamarka.net и targovskamarka.org и да ги насочи към едно и също IP и едни и същи файлове. В това число влиза и пренасочване на домейн от тип "Паркиране на домейн". За избягване на наказание от Гугъл за дублиране на съдържание, идеалният случай е да се определи един от домейните като главен, а другите домейни да пренасочват към главния. Като изключително важно е пренасочването да бъде от тип 301 - permanent redirect. Нека в този пример главен домейн е targovskamarka.com. Дори да са на споделен хостинг трябва всеки от домейните да има различна уеб директория, като главния съдържа файловете, а тези които пренасочват съдържат в главната си уеб директория .htaccess файл като:
Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www\.)?targovskamarka\.(net|org)$ [NC] RewriteRule ^(.*)$ http://targovskamarka.com/$1 [R=301,L]
Този .htaccess файл поставен в главната уеб директория на домейните които пренасочваш, ще ти помогне дори в случая, когато си направил грешката да размножиш файловете на сайта на няколко различни места. Освен това ще пренасочва не само главната страница, а и вътрешните страници. Например targovskamarka.net/contact.html вече ще сочи към targovskamarka.com/contact.html
Внимание: Тук има един тънък момент. Ако искаш targovskamarka.net/blog/ да бъде пренасочен към targovskamarka.com/blog/ задължително трябва да изтриеш .htaccess файла в директория blog на стария домейн targovskamarka.net. Същото се отнася и за други поддиректории в които има .htaccess файлове.
Преминаване към нов домейн
Както вече сигурно се досети подобен на горния .htaccess файл се ползва и в случаите, когато преместваш сайта си на нов домейн. Например досега си ползвал domain-bg.com и вече притежаваш domain.bg. Новия домейн .bg е по престижен, затова го направи главен, а стария пренасочи към новия. Не е нужно новия домейн да бъде на друг хостинг. Може да го насочиш към същия IP адрес и от cpanel на хостинга да си добавиш новия домейн като addon домейн. Ако нямаш право на повече addon домейни ще трябва да си доплатиш на хостинг доставчика за още един домейн.
Би трябвало при такова пренасочване новият домейн да наследи всички активи на връзките към стария домейн. Все пак те съветвам да промениш на колкото повече места можеш връзките да сочат директно към новия домейн и да не минават през пренасочване. След като копираш файловете на сайта на новата уеб директория и направиш това пренасочване, увери се, че то работи - при написване на стария домейн в браузъра, той трябва да се подмени с новия. Ако всичко работи можеш да изтриеш всички файлове на сайта от старата уеб директория, като оставиш само файла .htaccess - това ще ти спести място на хостинга и ще избегнеш объркване да променяш старите файлове и да се чудиш защо сайта не се променя 😉
Дублиране на съдържание
За търсачките адресите domain.com, www.domain.com, domain.com/index.html, www.domain.com/index.html, domain.com/index.php и www.domain.com/index.php са различни адреси. Личното ми мнение е че Гугъл е достатъчно "умен" и няма да изтълкува това като дублиране на съдържание. По мои наблюдения Гугъл се справя и с още по сложни URI адреси като domain.com/index.php?lang=bg или www.domain.com/?lang_id=2, които също сочат началото на сайта и по-точно българската версия и са точно като страницата domain.com. Въпреки това ако те гони параноя, че Гугъл ще решат друго и се страхуваш от наказание заради дублиране на съдържание, може да използваш следния .htaccess файл.
Options +FollowSymlinks -Indexes RewriteEngine On RewriteCond %{THE_REQUEST} /index\.(php|html)\ HTTP/ RewriteRule ^index\.(php|html)$ / [R=301,L] RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC] RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Нали не е нужно да ти казвам да замениш domain.com с твоя домейн? 🙂 В този пример като приоритет се задава изписване на домейна като domain.com вместо www.domain.com - по-кратко и по-удобно е. Време е всички да се отървем от досадното "www.". Ако все пак по някаква странна причина искаш твоя домейн да се изписва само като www.domain.com ще трябва да замениш последните два реда със следните:
RewriteCond %{HTTP_HOST} ^domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Ето още един начин това да стане. Долните два реда са еквивалент на горните два реда, като дори не е нужно да се посочва домейна. Отново се прави постоянно пренасочване на всеки URL адрес, към съответния URL адрес с www. отпред.
RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Съвет за уеб разработчиците
Като поставяш в кода връзка към началната страница не пиши "index.php", а само "/". Също така добра практика е всичките ти връзки да започват с / например пиши "/contact.php" вместо "contact.php". Връзките до картинките да започват с "/images" вместо "images" и по същия начин пиши "/css" и "/js" вместо само "css" и "js".
Поддомейн или директория
Често получавам въпроса blog.domain.com или domain.com/blog? Няма еднозначен отговор, защото зависи каква е целта ти.
1. Използване на поддомейн
Ако искаш новия поддомейн да се разглежда от търсачките като отделен сайт и да излиза в резултатите от търсене като още един резултат, тогава избери варианта с поддомейн. Възможно е поддомейна да задмине основния домейн и да излиза в SERP по-напред. Особено ако основния сайт не се променя толкова често както блога.
Ако до този момент си ползвал поддиректория и искаш вече да ползваш субдомейн. Първото което трябва да направиш е от cpanel да си добавиш поддомейна от Domains -> Subdomains. Нека за този пример поддомейна се казва "sub". След това добави следния .htaccess:
Options +FollowSymLinks RewriteEngine On RewriteRule ^sub(/(.*))?$ http://sub.domain.com/$2 [R=301,L]
Ако случайно няма mod_rewrite може да се осъществи и с mod_dir като замениш последните 2 реда с:
Redirect 301 /sub http://sub.domain.com
2. Използване на поддиректория
Ако искаш да засилиш тежестта на основния домейн тогава избери варианта с директория. Всяка статия в блога ще носи тежест на домейна.
Ако до този момент си ползвал поддомейн и искаш да започнеш да ползваш поддиректория, като например пренасочване на sub.domain.com и www.sub.domain.com към domain.com/sub/, тогава ползвай следния .htaccess файл:
Options +FollowSymLinksRewriteEngine On # изключение за оправяне на липсваща наклонена черта RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.domain\.com$ [NC] RewriteCond %{DOCUMENT_ROOT}/%2%{REQUEST_URI}/ -d RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L] # пренасочване на всички субдомейни към съответни поддиректории RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.domain\.com$ [NC] RewriteRule ^(.*)$ /%2/$1 [QSA,L]
Това ще пренасочва не само поддомейна sub, а и всеки поддомейн, който имаш към съответната поддиректория. Ако притежаваш собствен DNS сървър, може да използваш горния .htaccess файл за създаване на виртуални поддомейни.
Поддомейн към директория
Ако искаш да пренасочиш само един поддомейн, Например само blog.domain.com да се отваря на domain.com/blog и всички останали поддомейни да си работят. Използвай кода:
RewriteCond %{HTTP_HOST} ^blog\.domain\.com$ RewriteCond %{REQUEST_URI} !^/blog/ RewriteRule (.*) /blog/$1Прочетена:26631
Изключително полезно четиво за пренасочване с .htaccess на апаха. На мен ми помогна много и затова горещо го препоръчвам на всички.
притесняваме само, че статията е писана на 11 септември 😉
Не разбирам, какво като е писана тогава? Статията е все така актуална и ще бъде такава в близките няколко години.
Здравей,
Исках да те попитам, според теб до каква степен под домейна е ефективен......как реагира гоогъл на под домейните, под каква форма да са те.....като цяло въпроса ми е да изпозлвам ли под домейни.......??? И ако да защо и ако НЕ пак защо?
@Anton отговор на твоя въпрос има горе в самата статия, като са разгледани двата варианта: поддомейн и директория. Няма еднозначен отговор за това дали да ползваш поддомейн или не.
Благодаря, беше доста полезно!
Как да разреша само 1 ip да има достъп до сървъра?
Във файла .htaccess в главната уеб директория на сървъра добавете в началото на файала:
order deny,allow
deny from all
# IP адрес (на компютъра ви вкъщи)
allow from 127.0.0.1
където 127.0.0.1 се замества с вашия IP адрес. Разбира се това ще блокира всички останали посетители на сайта - хора и търсачки. Ползва се при тестване на сайта. Има вероятност този код да не сработи, защото може .htaccess файловете да са забранени на този сървър, затова тествайте с различни IP и от различни места.