1

2

Creounity Машина Времени
Сегодня
Написать автору через форму обратной связи
Электропочта: inscriptor@creounity.com
► Нажмите «Shift» + «L» для просмотра английской версии



Идея, разработка и дизайн:
Андрей Третьяков

Андрей Третьяков, inscriptor, creounity

(inscriptor)
[+ сборник моих стихов прошлых лет ]
и
Creative Force
2009–.

Поделитесь с другом короткой ссылкой
на «Creounity Машину Времени»:
creounity.com/tm

Благодарности +
вехи развития проекта


Полезные интернет-ресурсы
в области нумизматики


Данное веб-приложение
работает на PHP-движке
Alcutima Plus v2.6.5
rev. 20151111
(араб. القوطيما)

Количество стран, в которых
пользуются веб-приложением
«Creounity Машина Времени»:
190
(по данным Google Analytics)

Частичная или полная перепечатка текстового и графического содержимого этого веб-сервиса запрещена без письменного разрешения автора и указания активной индексируемой обратной ссылки!

Информация
о государственной регистрации

(показать/скрыть).


Перейти к списку всех статей

301 редирект с поддомена на домен


Теги этой статьи: 301 редирект, редирект с поддомена на домен, инструкция, .htaccess, веб-разработка


На днях изменилась система формирования адресов Creounity Машины Времени. Так, «apps» больше не используется как название поддомена. Вместо адреса http://apps.creounity.com/time_machine/
теперь используется следующий: http://creounity.com/apps/time_machine/.

Все файлы остались на своих местах, изменился лишь способ адресации. Было 2 возможных способа сделать редирект (перенаправление) со старых адресов на новый: либо через PHP в индексном файле Creounity Машины Времени, либо через файл .htaccess. При этом поисковые системы по старому адресу теперь получают 301 редирект (Moved Permanently), т.е. они понимают, что содержимое по старому адресу было перенесено навсегда.

Для размещения собственного коммутационного и серверного оборудования на удалённой площадке обращайтесь в msm.ru — узнайте цены на услуги colocation.

1. 301 редирект с поддомена на домен с помощью .htaccess может быть реализован следующим способом:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.subdomain\.site\.com [OR]
RewriteCond %{HTTP_HOST} ^subdomain\.site\.com
RewriteRule ^(.*)$ http://www.site.com/$1 [L,R=301]

Применительно к моему проекту и структуре каталогов в нём, вышеперечисленные инструкции необходимо поместить в .htaccess, располагающийся на корне папки «apps/», а не в .htaccess на корне сайта.

В противном случае (если разместить инструкции в .htaccess на корне сайта) редирект будет срабатывать некорректно и приводить пользователя вашего сайта к ссылке «http://creounity.com/apps/apps/time_machine/». Это произойдёт из-за RewriteBase и того, что htaccess с редиректом находится выше, чем «/apps/». Когда пользователь откроет ссылку старого образца, то запрос придёт в «apps.creounity.com», при этом .htaccess находится на один уровень выше текущей папки. В нём прописан «RewriteBase /». Так как относительно RewriteBase мы находимся в папке «/apps/», то в RewriteRule попадает не просто «time_machine/», а «apps/time_machine/». Таким образом:

RewriteEngine On
RewriteBase /

# Запрос: http://apps.creounity.com/time_machine/
# Относительно .htaccess с RewriteBase / мы находимся в папке apps/,
# значит, в RewriteRule попадает 'apps/time_machine/'

RewriteCond %{HTTP_HOST} ^www\.apps\.creounity\.com [OR]
RewriteCond %{HTTP_HOST} ^apps\.creounity\.com

# На входе 'apps/time_machine', значит, $1 = 'apps/time_machine',
# значит http://creounity.com/apps/$1 = http://creounity.com/apps/apps/time_machine/

RewriteRule ^(.*)$ http://creounity.com/apps/$1 [L,R=301]


Можно проверить, что в строке, которую смотрит RewriteRule, есть «apps/». Если указать:

RewriteRule ^apps/(.*)$ http://creounity.com/$1 [L,R=301]

то правило тоже сработает.

2. В моём случае 301 редирект с поддомена на домен с помощью инструкций в индексном PHP был сделан таким образом:

if ($_SERVER['HTTP_HOST']=="subdomain.site.com") {
 header('HTTP/1.1 301 Moved Permanently');
 header("Location: http://site.com/subdomain".$_SERVER['REQUEST_URI']);
}

Так всё же как лучше сделать 301 редирект с поддомена на домен? Вот какой комментарий я получил на этот счёт:

«Технически .htaccess и перенаправление в index.php делают одно и то же — возвращают статус 301 и заголовок Location: с нужной ссылкой. Так что поисковикам всё равно.

.htaccess будет тратить немного меньше ресурсов, так как не нужно запускать php, но это очень незначительная разница.

С точки зрения порядка лично я размещаю редиректы в .htaccess. Если они лежат в коде приложения, их сложнее найти, если нужно разобраться, почему происходит редирект. Но тоже незначительно.

Рекомендую всегда размещать .htaccess в той папке, где он должен срабатывать, это на порядок снижает уровень сложности конфигурации.»


Олег Петрачёв, он же хабраюзер cronfy


Таким образом, оба описанных способа являются практически равноценными.


18 ноября 2012, Россия, Самара



Contact

Contact us via:

Facebook ICQ Mail Vkontakte