.htaccess перенаправить все страницы в новый домен.

Какое правило перенаправления я буду использовать для перенаправления всех страниц в olddomain.example для перенаправления в newdomain.example?

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

Я думал, что это будет делать (в базовой директории olddomain.example):

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

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

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

Ответы

Ответ 1

Может быть так:

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

Ответ 2

Ответ ниже может потенциально вызвать бесконечный цикл перенаправления...

Здесь этот перенаправляет все после доменного имени на URL-адресе в точно такую же копию на новом доменном URL-адресе:

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

www.example.net/somepage.html?var=foo перенаправляет на www.newdomain.com/somepage.html?var=foo

Ответ 3

Просто, чтобы уточнить, после удаления перенаправления хостинга, который был в пути, мое оригинальное решение также работает:

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

Ответ 4

Я использовал для своего блога Wordpress это как .htaccess. Он преобразует http://www.blah.example/asad, http://blah.example/asad, http://www.blah.example2/asad и т.д. В http://blah.example/asad. Спасибо всем другие ответы я понял это.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !.*YOURDOMAIN\.example$ [NC]
RewriteRule ^(.*)$ http://YOURDOMAIN.example/$1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Ответ 5

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

Это сработало для меня

Ответ 6

Существуют различные способы сделать это и различные переадресации, я перечислил их ниже:

301 (Постоянный) Переадресация: постоянно указывать весь сайт на другой URL. Это наиболее распространенный тип перенаправления и полезен в большинстве ситуаций. В этом примере мы перенаправляем домен "example.com":

# This allows you to redirect your entire website to any other domain
Redirect 301 / http://example.com/

302 (Временный) Перенаправление: укажите весь сайт на другой временный URL. Это полезно для целей SEO, когда у вас есть временная целевая страница и вы планируете вернуться на главную целевую страницу позднее:

# This allows you to redirect your entire website to any other domain
Redirect 302 / http://example.com/

Перенаправить index.html в определенную подпапку:

# This allows you to redirect index.html to a specific subfolder
Redirect /index.html http://example.com/newdirectory/

Перенаправить старый файл на новый путь к файлу:

# Redirect old file path to new file path
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html

Перенаправление на определенную страницу индекса:

# Provide Specific Index Page (Set the default handler)
DirectoryIndex index.html

Ответ 7

Если вы хотите перенаправить из какого-либо места в субдомен, вы можете использовать:

Redirect 301 /Old-Location/ http://subdomain.yourdomain.com

Ответ 8

Если новый домен, на который вы перенаправляете свой старый сайт, находится на другом компьютере, вы можете просто использовать Redirect

Redirect 301 / http://newdomain.com

Это перенаправит все запросы из olddomain в newdomain.

Директива

Redirect не работает или может вызвать Redirect loop, если ваш новый домен и olddomain находятся на одном хосте, в этом случае вам нужно будет использовать mod-rewrite для перенаправления на основе запрошенного заголовка хоста.

RewriteEngine on


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 

Ответ 9

Моя репутация не позволяет мне комментировать ответ, но я просто хотел отметить, что здесь ответ с самым высоким рейтингом имеет ошибку:

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

должен иметь косую черту до 1 доллара, так

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

Ответ 10

Мое решение как SymLinks не работало на моем сервере, поэтому я использовал If на своем PHP.

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
$redirect = str_replace("www.", "", curPageURL());
$remove_http_root    = str_replace('http://', '', $redirect);
$split_url_array     = explode('/', $remove_http_root );


if($split_url_array[0] == "olddomain.com"){
    header("Location: http://www.newdomain.com/$split_url_array[1]");
    die();
}

Ответ 11

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

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

RewriteRule ^(.*)$ http://newdomain.com/ [??]

Ответ 12

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

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

К сожалению, эта страница ушла. Вы бы хотели посетить "/new_products"?

(и, тем не менее, делать это автоматически.)

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

Ответ 13

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

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]

Ответ 14

Я попробовал ответить user968421 и решение OP, но браузер обнаружил ошибку безопасности для страницы проверки. Я не могу сказать, почему именно.

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

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

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

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

Ответ 15

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

Пример .htaccess

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

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

Ответ 16

Предыдущие ответы не помогли мне.

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

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

Ответ 17

Можно ли переориентировать из старого в новый домен (вдвое больше Wordpress) и включить параметр newdomain.com/%category%/url в новую структуру ссылок?

Спасибо!

Ответ 18

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

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]