.htaccess перенаправляет все страницы на новый домен
какое правило перенаправления я бы использовал для перенаправления всех страниц под olddomain.com
для перенаправления на newdomain.com
?
сайт имеет совершенно другую структуру, поэтому я хочу, чтобы страница под старый домен для перенаправления на новый домен страница индекса.
Я думал, что это будет делать (под olddomain.com базовый каталог):
RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]
но если я перейду к olddomain.com/somepage
Я перенаправлен на newdomain.com/somepage
. Я ожидаю перенаправления только на newdomain.com
без суффикса страницы.
как мне сохранить последнюю часть?
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 и перенаправляет весь остальной персонал на новый домен.