Теги этой статьи: 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 может быть реализован следующим способом:
Применительно к моему проекту и структуре каталогов в нём, вышеперечисленные инструкции необходимо поместить в .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/'
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 в той папке, где он должен срабатывать, это на порядок снижает уровень сложности конфигурации.»