Ответ 1
Может быть так:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]
Какое правило перенаправления я буду использовать для перенаправления всех страниц в 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
без суффикса страницы.
Как мне сохранить последнюю часть?
Может быть так:
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/$1 [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.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>
<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>
Это сработало для меня
Существуют различные способы сделать это и различные переадресации, я перечислил их ниже:
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
Если вы хотите перенаправить из какого-либо места в субдомен, вы можете использовать:
Redirect 301 /Old-Location/ http://subdomain.yourdomain.com
Если новый домен, на который вы перенаправляете свой старый сайт, находится на другом компьютере, вы можете просто использовать 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]
Моя репутация не позволяет мне комментировать ответ, но я просто хотел отметить, что здесь ответ с самым высоким рейтингом имеет ошибку:
RewriteEngine on
RewriteRule ^(.*)$ http://www.newdomain.com$1 [R=301,L]
должен иметь косую черту до 1 доллара, так
RewriteEngine on
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
Мое решение как 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();
}
Это ошибка в более старых версиях apache (и, следовательно, mod_rewrite), где префикс пути был добавлен к переписанному пути, если он был изменен. Смотрите здесь
Я думаю, что это было исправлено в apache2 V2.2.12, есть специальный флаг, который вам нужно использовать, который я добавлю здесь, когда я его найду (я думаю, что это был NP для No Path)
RewriteRule ^(.*)$ http://newdomain.com/ [??]
С точки зрения удобства использования было бы лучше, если бы вы также отправили путь с запросом (т.е. то, что у вас есть на данный момент), и пусть ваш новый сайт справится с ним:
Вы искали "/products".
К сожалению, эта страница ушла. Вы бы хотели посетить "/new_products"?
(и, тем не менее, делать это автоматически.)
Это, очевидно, много кодирования и эвристики для более крупного веб-сайта, но, на мой взгляд, он окупится с точки зрения удовлетворенности пользователей (когда ваша тщательно сохраненная закладка вашего продукта мечты приведет вас к первой странице нового домена. com, это расстраивает.)
Если вы хотите перенаправить на новый новый сайт (домен) без параметров или страниц, используйте это:
RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]
Я попробовал ответить user968421 и решение OP, но браузер обнаружил ошибку безопасности для страницы проверки. Я не могу сказать, почему именно.
Наш хозяин (Site Ground) тоже не мог понять.
Окончательное решение было близким, но небольшая корректировка ответа user968421 (примечание стороны: в отличие от OP, я пытался перенаправить на соответствующую страницу, а не только на домашнюю страницу, поэтому я поддерживал обратную ссылку [ $1
после домена] из user968421 ответ):
RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]
Получил настройку генератор перенаправления htaccess, рекомендованный Host Gator статья (отчаянные времена, отчаянные меры, amiright?).
Использовать условные переадресации с Options -FollowSymLinks
и AllowOverride -Options
, отключенные Hoster, если также нужно обслуживать несколько локальных файлов:
Пример .htaccess
# Redirect everything except index.html to http://foo
<FilesMatch "(?<!index\.html)$">
Redirect 301 / http://foo/
</FilesMatch>
Этот пример будет обслуживать локальный index.html и перенаправляет всех остальных сотрудников в новый домен.
Предыдущие ответы не помогли мне.
Я использовал этот код. Если вы используете OSX, убедитесь, что вы используете правильный формат.
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]
Можно ли переориентировать из старого в новый домен (вдвое больше Wordpress) и включить параметр newdomain.com/%category%/url в новую структуру ссылок?
Спасибо!
Просто так, и это не перенесет конечный запрос с URL на новый домен.
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]