Обязательное SEO - перенаправляем все на http://www.site.ru/
Обязательное SEO - перенаправляем все на http://www.site.ru/ - это необходимо каждому более - менее серьезному сайту. Важно знать, что у сайта который доступен по нескольким адресам таким как :
- http://www.site.ru/
- http://www.site.ru/index.php (html)
- http://site.ru/
- http://site.ru/index.php (html)
Впоследствии могут быть проблемы, связанные с песимизацией вашего сайта поисковиками, по причине дублирования контента, да и конкуренты могут накупить или расставить ссылок на разные адреса, казалось бы одного сайта и даже одной страницы! Конечно эти вещи необходимо делать перед публикацией ( открытием ) сайта, но все же лишним устранить проблему с канонизацией ссылок, никогда не поздно! В данном примере рассматривается способ склейки работающий на серверах Apache с включенным mod_rewrite, который будет включен на всех нормальных хостингах! Так как к файлу настройки самого Apache httpd.conf на реальном хостинге вам не дадут, склейку будем осуществлять при помощи файла .htaccess, позволяющий управлять разрешенными хостерами настройками сервера Apache.
Решением проблемы :
- 1 - Идем на сервер
- 2 - Ищем в корневой директории сайта волшебный файл .htaccess, если файла нет - создаем!
- 3 - Открываем файл .htaccess и пишем приведенный ниже код.
Важно : проверяя любые телодвижения с mod_rewrite ОБЯЗАТЕЛЬНО ЧИСТИТЕ КЕШ БРАУЗЕРА после внесения изменений в файл .htaccess!
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^ваш-site\.ru
RewriteRule ^(.*)$ http://www.ваш-site.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html?)\ HTTP
Rewriterule ^(.*)index\.(php|html?)$ $1 [R=301,L]
Итак, кому нужен был рабочий пример склейки по 301 - му редиректу копируйте, и используйте, заменив слова ваш-site.ru на соответственно ваш реальный адрес сайта, тем же кто хочет повникать, что это за каракули и как они работают - читаем дальше!
По порядку :
-
RewriteEngine On - включает систему перезаписи URL
-
RewriteBase / - указываем папку в которой находится сайт, в данном случае корневая папка
-
RewriteCond %{HTTP_HOST} ^super-site\.su и RewriteRule ^(.*)$ http://www.super-site.ru/$1 [R=301,L] - Это команды модуля mod_rewrite. RewriteCond - команда, которая формирует условие накладываемое на следующую после нее команду - RewriteRule. В данном случае происходит проверка по какому адресу обратились к сайту и если этот адрес : ваш-site.ru без www то задействуется команда RewriteRule на адрес сайта с www по 301 - му редиректу. Для того, чтобы гарантировать правильность обработки URL используется флаг L - означающий предотвращение последующих за ним правил перезаписи.
-
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html?)\ HTTP и Rewriterule ^(.*)index\.(php|html?)$ $1 [R=301,L] - Работает аналогично описанным выше командам, за исключением того, что теперь проверка происходит, что идет после знака / и если там есть index.php или index.html - то перезаписываем на / .
Выше были описаны команды (дерективы) модуля mod_rewrite и, что они делают. Это не так сложно для понимания. Немного непонятным могут показаться: %{HTTP_HOST} и %{THE_REQUEST} - это серверные переменные и различные символы $*.^ - это регурярные выражения, ниже приведена таблица символов регулярных выражений и их значения использумых в данном примере. Для лучшего понимания можете почитать : Что такое регулярные выражения? у нас на сайте или на wikipedia.org.
| символ | значение |
|---|---|
|
^
|
Означает начало строки. |
|
.
|
Означает один любой символ. Это может быть любая цифра, любая буква, любой пробельный символ или другой знак. |
|
*
|
Означает ноль или более повторений предшествующего символа. |
|
$
|
Означает конец строки. |
|
( )
|
Используется для составления более сложных выражений, значение внутри () - аналогично переменной, и к полученным в результате комбинирования выражению могут быть применены другие символы такие как : ? или *. |
|
\
|
Используется для включения служебных символов в подстоку поиска. |
|
|
|
Используется для предоставления албтернативного варианта ( или | или ), но только один из вариантов. |