.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 ]

411 голосов
/ 28 сентября 2011

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

Здесь этот перенаправляет все после имени домена в 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

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

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

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]
76 голосов
/ 22 декабря 2009

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

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]
17 голосов
/ 21 октября 2014

Я использовал для своего блога 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>
13 голосов
/ 27 октября 2016
<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>

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

11 голосов
/ 13 мая 2015

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

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
9 голосов
/ 12 декабря 2013

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

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

6 голосов
/ 01 июля 2016

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

Redirect 301 / http://newdomain.com

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

Директива

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

RewriteEngine on


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 
5 голосов
/ 04 января 2018

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

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

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

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
3 голосов
/ 06 октября 2014

Мое решение как 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();
}
...