X

Редирект через .htaccess (mod_rewrite) на другой домен с сохранением url

Пример редиректа на другой сайт при помощи mod_rewrite с сохранением url.

Добавляем в .htaccess следующий код

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]
Категории: Apache Сервера
Тэги: htaccess

Комментарии (9)

  • Подскажите, пожалуйста, почему при добавлении этого кода:
    RewriteEngine On
    RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]

    переадресация происходит только для адресов вроде
    http://site.com/
    http://site.com/img/
    http://site.com/sdfsdf

    А переадресация для файлов не срабатывает, т.е. файл по адресу
    http://siteold.com/css/main.css
    так и откроется на старом домене, а я хочу, чтобы и ко всем файлам на старом сайте тоже срабатывал редирект на новый домен.
    Наличие или отсутствие Options +FollowSymLinks в моём случае никак не влияет на переадресацию, я проверил.

    Подскажите, как добиться нужного мне результата?

    • Еще может быть вариант, когда перед apache-ем стоит nginx и статические файлы отдает самостоятельно, не передавая управления apache-у. Проверить можешь прописав для теста полный путь, типа того:

      RewriteEngine on
      RewriteRule ^css/main\.css https://www.new-site.com%{REQUEST_URI} [R=301,L,QSA,NE]

      Если редирект по прежнему не срабатывает для этого адреса, то попробуй написать в поддержку хостера и уточнить про nginx перед apache-ем.

      • Да, похоже что так и было, решил эту проблему, просто удалив все файлы со старого хостинга. Просто сначала хотел оставить их, на всякий случай. Сейчас уже экспериментировать лучше не буду, я уже добился нужной работоспособности редиректа. К тому же уже сообщил и яндексу и гуглу, что сайт перехал на новый домен (не хочу создавать какие-либо сложности этому процессу). Но всё равно, спасибо за инфу, наверняка кому-нибудь пригодится. Мне думается, что упомянуть о такой особенности можно даже в основном тексте статьи.

        Кстати, не пришло от вас (с сайта) письмо об ответе на мой вопрос (удобнее когда приходит).

    • Привет, если в примере все так как ты написал, то не должно пропускать файлы (т.е. в твоем примере все верно написано).

      Можешь попробовать еще сделать так:

      RewriteEngine on
      RewriteRule ^ http://www.new-site.com%{REQUEST_URI} [R=301,L,QSA,NE]

  • допустим я делаю редирект с сайта1на сайт2, а в браузере будит отображаться адрес сайта1.
    Я правильно понял?

    • Если надо чтобы когда ты напишешь в браузере: http://site2.com открывался сайт http://site1.com. То тебе надо просто "смапить" папку домена site1.com с доменом site2.com. Это может сделать тех поддержка твоего хостера. То что я описываю выглядит как "1 сайт" физически связан с двумя разными доменами. Разумеется, для этого случая тебе надо владеть обоими доменами.
      Чаще всего это может пригодится, как у тебя один и тот же сайт должен по каким-то причинам открываться по двум доменам, например: mysite.COM и mysite.RU, но учти что поисковикам это не нравится, т.к. по сути для них происходит дублирование контента.

      • Не понял ответа на вопрос Василия, почему верно если сами пишете что будет отображаться http://site2.com. Как раз проблема в том что должно отображаться http://site1.com а по факту при переходе отображается http://site2.com. Сам с такой проблемой столкнулся, необходимо сделать переадресаию с сохранением в адресной строке http://site1.com и всех путей от сайта http://site2.com. Если знаете как, напишите мне, работу оплачу.

        • Привет, ты все правильно заметил - это была ошибка, уже исправил.

          Реализовать, что вы хотите через редиректы нельзя.

          Можно через прокси, смотри mod_proxy

          Если оба сайта твои и находятся на одном сервере, тогда так же можно смапить домен2 в папку домена1, но думаю тут не про этот случай идет речь.

          У меня, к сожалению, сейчас много работы. Попробуй опубликовать проект на weblancer.net или fl.ru, там много админов кто сможет помочь.