.htaccess перенаправить все страницы на новый домен - PullRequest
199 голосов
/ 22 декабря 2009

Какое правило перенаправления я бы использовал, чтобы перенаправить все страницы в olddomain.example, чтобы перенаправить на newdomain.example?

Сайт имеет совершенно другую структуру, поэтому я хочу, чтобы каждая страница в старом домене перенаправлялась на новый домен index page .

Я думал, что это подойдет (в старом каталоге olddomain.example):

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]

Но если я перейду на olddomain.example/somepage, меня перенаправят на newdomain.example/somepage. Я ожидаю перенаправления только на newdomain.example без суффикса страницы.

Как мне сохранить последнюю часть?

Ответы [ 17 ]

2 голосов
/ 07 апреля 2016

Я попробовал ответ пользователя 968421 и решение ОП, но браузер выдал ошибку безопасности для страницы оформления заказа. Я не могу сказать вам, почему именно.

Наш хост (Site Ground) тоже не смог этого понять.

Окончательное решение было близким, но слегка подправило ответ пользователя 968421 (примечание: в отличие от OP, я пытался перенаправить на соответствующую страницу, а не только на домашнюю страницу, поэтому я сохранил обратную ссылку [$1] после домена] из ответа пользователя 968421):

RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]

Получил настройки от этого генератора перенаправления htaccess , рекомендованного Статья Host Gator (отчаянные времена, отчаянные меры, amiright?).

2 голосов
/ 17 марта 2015

Если вы хотите, чтобы перенаправление завершило создание нового сайта (домена) без параметров или страниц, используйте это:

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]
2 голосов
/ 22 декабря 2009

С точки зрения удобства использования было бы лучше, если бы вы также отправили путь с запросом (т. Е. То, что у вас есть в данный момент) и позволили вашему новому сайту справиться с этим:

Вы искали "/products".

К сожалению, эта страница исчезла. Хотите вместо этого посетить "/ new_products"?

(и еще лучше, делая это автоматически.)

Это, очевидно, много кодирования и эвристики для более крупного веб-сайта, но, на мой взгляд, это окупится с точки зрения удовлетворения пользователей (когда ваша тщательно сохраненная закладка продукта вашей мечты просто приводит вас на первую страницу нового домена. ком, это расстраивает.)

2 голосов
/ 22 декабря 2009

Это ошибка в более старых версиях apache (и, следовательно, mod_rewrite), где префикс пути был добавлен к переписанному пути, если он изменился. Смотрите здесь

Я думаю, что это было исправлено в apache2 V2.2.12, вам нужно использовать специальный флаг, который я добавлю сюда, когда найду его (я думаю, это был NP для No Path)

RewriteRule ^(.*)$ http://newdomain.com/ [??]
1 голос
/ 14 января 2015

Используйте условные перенаправления с Options -FollowSymLinks и AllowOverride -Options, отключенными хостером, если также нужно обслуживать несколько локальных файлов:

Образец .htaccess

# Redirect everything except index.html to http://foo
<FilesMatch "(?<!index\.html)$">
    Redirect 301 / http://foo/
</FilesMatch>

Этот пример будет обслуживать локальный index.html и перенаправлять всех остальных сотрудников на новый домен.

0 голосов
/ 15 мая 2019

Просто так, и это не перенесет конечный запрос с URL на новый домен.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]
0 голосов
/ 05 ноября 2018

Предыдущие ответы у меня не сработали.

Я использовал этот код. Если вы используете OSX, убедитесь, что вы используете правильный формат.

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]
...