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


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

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

Я думал, что это будет делать (под olddomain.com базовый каталог):

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

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

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

15 178

15 ответов:

может быть такой:

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

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

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

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

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

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

я использовал для моего блога Wordpress это как .htaccess. Он преобразует http://www.blah.nl/asad, http://blah.nl/asad, http://www.blah.com/asad etc, to http://blah.com/asad Благодаря всем ответам я понял это.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/ [R=301,L]
</IfModule>

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

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

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

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

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/

индекс редирект.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

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

Redirect 301 / http://newdomain.com

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

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

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

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

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

мое решение в качестве символических ссылок не работало на моем сервере, поэтому я использовал 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();
}

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

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

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

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

вы искали "/продукты".

к сожалению, эта страница исчезла. Вы хотели бы посетить "/new_products" вместо этого?

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

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

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

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

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

наш хозяин (Земля сайта) тоже не мог понять.

окончательное решение было близко, но небольшая настройка ответа user968421 (Примечание: В отличие от OP, я пытался перенаправить на соответствующую страницу, а не только на домашнюю страницу, поэтому я сохранил обратную ссылку [the после домена] от user968421 ответ):

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

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

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

образец .htaccess

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

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