Практика использования редиректа для склейки страниц и домена.
Так это всё была теория так сказать, теперь практика. Когда я только создавал сайт, он к сожалению был статическим. То есть на html были только страницы, потом по мере того как я научился применять php и mysql, я перевел часть сайта на пхп. Но оставалась такая проблема, большая часть трафика шла на статические странички. Надо было это как то исправлять, так как очень хотел перевести его полностью на пхп, и навести лоск. Начал активно вникать в тему редиректа. Плюс я обнаружил что часть моих ВС идёт на домен с www, а часть на домен www, да и вообще говорят что склеивать их нужно чтоб поисковики не различали их. Ведь раз они их различают то и всякий ТИЦ и пр + ссылки тоже делятся. А нам этого не надо.
Задача: склеить домены с www и без www, для этого заюзаем mod_rewrite в .htaccess. Затем занесём в БД старые-новые странички и через стандартный редирект перенаправим всё на них!
Первым делом я занялся редиректом старых страниц на html, на новые адреса этих страниц. Для этого занес все старые страницы в mysql, они получили новый url. На который я в последствии и перенаправлял запросы.
Для того чтобы перенаправить запросы, надо было в файле .htaccess кой чё дописать. Но для начала надо было этот файл найти). Я долго и отчаянно его искал у себя на хостинге, но так и не нашёл. Кстати, его можно увидеть зачастую только при ftp доступе, из directadmin и т.п. систем управления сайтом этот файл не видно. Так вот файл то я не нашёл ... поэтому пришлось его создавать самому.
Создавать его надлежит в том же каталоге, в каком находятся файлы при обращении к которым необходимо осуществить редирект. Вообще файл .htaccess может находится в нескольких каталогах, веб сервер учитывает только последний из них. Скажем у вас 2 этих файла, один лежит в /, а другой в /articles/. Так вот если страничка лежит в первом каталоге, то и перенаправляться она будет по правилам описанным в файле из этого каталога. Тогда как во втором случае, файл .htaccess находящийся в корневом каталоге / будет проигнорирован, так как в каталоге /articles/ имеется собственный файл .htaccess, по которому и будет произведено перенаправление.
Так как у меня исходные файлы находились в корне, то в моём файле .htaccess в корневом каталоге появились следующие записи:
redirect 301 /blabla.html http://www.mysite.ru/newblabla.php?id=1
И всё стало чудесно перенаправляться, ввожу старый url в браузер, у меня всё перенаправляется на новый.
Единственная проблема, когда я создал первый файл .htaccess, я забыл поставить . вначале его))) И из за этого он у меня не работал, сабака. Когда всё исправил, всё заработало на ура! Вот ещё что, чтобы проверить работает у вас этот файлик и всё что в нём написано, сохраните внутри его чтонить непотребное (типа этого -ывгларлыаолы). Если при обращения к страницам вашего сайта с этим файлом будет выдавать ошибку - значит файлег этот работает!
Следующий этап, клеим с www и без www, так же и www с index и без www с index. То есть
www.mysite.ru
www.mysite.ru/index.php
mysite.ru
mysite.ru/index.php
Ведь поидее это 4 разных страницы могут быть. Нам же надо что бы всё интерпретировалось как www.mysite.ru. Для этого открываем уже созданный файлик .htaccess и добавляем туда следующий код:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite.ru
RewriteRule (.*) http://www.mysite.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.mysite.ru/ [R=301,L]
У меня всё заработало! Единственное какая была проблема, у меня же раньше был главный файл index.html а сейчас я сделал index.php. Я что бы это организовать добавил ещё одну строку редиректа
redirect 301 /index.html http://www.mysite.ru/index.php
В плане склейки адресов с www и без, можно использовать и такую запись. На ней я собственно и остановился для себя.
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mysite.ru
RewriteRule (.*) http://www.mysite.ru/$1 [R=301,L]
Дабы убедится что всё теперь норм лезим сюда и проверяем. Вводим урл сайта без www, в результате надо получить примерно следующее:
#1 Server Response: http://mysite.ru
HTTP Status Code: HTTP/1.1 301 Moved Permanently
Server: nginx/0.8.7
Date: Mon, 25 Jan 2010 07:21:57 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: close
Location: http://www.mysite.ru/
Content-Length: 296
Redirect Target: http://www.mysite.ru/
#2 Server Response: http://www.mysite.ru/
HTTP Status Code: HTTP/1.1 200 OK
Server: nginx/0.8.7
Date: Mon, 25 Jan 2010 07:21:57 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.2.10
Vary: Accept-Encoding,User-Agent
Если у вас такое же всё, особенно та часть что выделена жирным - то всё отлично, в противном случае мучаемся дальше.
| < Предыдущая | Следующая > |
|---|
Комментарии
Побывал так:
RewriteEngine ON
RewriteCond %{HTTP_HOST} ^domail1\.ru$ [NC]
RewriteRule ^.*$ http://domail2.ru/ [R=301,L]
Но остается мусор, например:
http://domail1.ru/index.php?id=12312321&s=sadkfgawefc
редиректит на
http://domail2.ru/?id=12312321&s=sadkfgawefc
Помогите пожалуйста.
Наверно можно и в DirectAdmin'e это как то сделать. К сожалению, нету возможности порыться в данной панели управления хостингом. Да и статья как бы не об этом ...
ну так сделайте, как я описали будет вам счастье)
RSS лента комментариев этой записи.