Перенаправление на другой сайт с тем же URI [дубликат]

Это просто анонимная функция, которая выполняется сразу после ее создания.

Это как если бы вы назначили ее переменной и использовали ее сразу после, только без переменной:

var f = function () {
};
f();

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

$(function(){
});

Это краткая форма привязки события ready:

$(document).ready(function(){
});
178
задан Yuval Adam 22 December 2009 в 11:50
поделиться

15 ответов

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

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]
142
ответ дан carla 22 August 2018 в 08:53
поделиться
  • 1
    даже после удаления $ 1 :) все равно ничего хорошего ... – Yuval Adam 22 December 2009 в 11:54
  • 2
    Не могли бы вы перезагрузить браузер? его даже перенаправление с помощью xampp здесь. Я просто испытал. – YOU 22 December 2009 в 11:58
  • 3
    Мой плохой ... он действительно работает, у моего хостинга был какой-то другой переадресация, на котором все было. Благодаря! :) – Yuval Adam 22 December 2009 в 11:59
  • 4
    Разве это не будет RewriteCond %{HTTP_HOST} !^NEWDOMAIN\.com$ [NC]? – Jim Geurts 21 June 2012 в 19:28
  • 5
    @JimGeurts Только если вы хотите перенаправить ВСЕ, что не является новым. Однако в этом случае мы хотели перенаправить ТОЛЬКО olddomain. – carla 20 January 2017 в 20:00

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

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

К сожалению, эта страница отсутствует. Вы хотели бы посетить «/ new_products» вместо этого?

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

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

2
ответ дан Boldewyn 22 August 2018 в 08:53
поделиться
  • 1
    Для указанного веб-сайта это практически не имеет значения, поскольку весь сайт изменился, но вы абсолютно правы. Веб-сайт должен быть максимально совместим с предыдущими версиями. +1 – Yuval Adam 22 December 2009 в 12:46

Мое решение как 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();
}
3
ответ дан Brent 22 August 2018 в 08:53
поделиться

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

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
12
ответ дан Daantje 22 August 2018 в 08:53
поделиться
  • 1
    Я считаю это наиболее полным ответом: он сохраняет рейтинг для каждой страницы и является общедоступным для всех доменов, которые не являются первичными! Что может быть лучше? – nzn 5 August 2015 в 21:54
  • 2
    Ключевым моментом здесь является то, что правило перезаписи домена приходит до правила перезаписи индекса WordPress. – MrMoxy 15 June 2016 в 04:36

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

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

9
ответ дан EmptySD 22 August 2018 в 08:53
поделиться
  • 1
    Это лучший способ. Поскольку многие Webhosters не разрешали использовать RewriteEngine в .htaccess. Все равно отлично! – Sprinterfreak 10 January 2015 в 01:14
  • 2
    Вы должны использовать RewriteEngine для перенаправления. Причина, по которой у вас возникла проблема, заключается в том, что RewriteEngine уже активен, и вам нужно только правило перенаправления. Я рад, что это помогло. – EmptySD 11 January 2015 в 06:31
  • 3
    Не правда. Он пропускает всю команду Rewrite и при использовании RewriteEngine On выбрасывает 500 Internal Error. Это очень ограниченное веб-пространство. Использование Redirect 301 / http://foo - единственный возможный способ борьбы. – Sprinterfreak 13 January 2015 в 22:24
<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>

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

8
ответ дан Iana Sergieieva 22 August 2018 в 08:53
поделиться

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

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

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

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

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

2
ответ дан J May 22 August 2018 в 08:53
поделиться

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

366
ответ дан Jayme Brereton 22 August 2018 в 08:53
поделиться
  • 1
    не будет ли это перенаправлять КАЖДЫЙ запрос хотя и даже для нового домена? И, по сути, вызывают два дублирующих запроса в этих случаях? – Bill Dami 2 August 2013 в 18:02
  • 2
    Это должно быть принято как лучший ответ – RSM 9 December 2013 в 23:00
  • 3
    Вопрос состоит в том, чтобы перенаправить все на главную страницу – kravits88 23 January 2014 в 02:23
  • 4
    Хотя это не ответ на вопрос, но я пришел к этому вопросу из SE, ища именно этот ответ. благодаря !!! – dav 16 March 2014 в 19:28
  • 5
    Может ли кто-нибудь ответить на вопрос Билла, пожалуйста. Не следует ли использовать RewriteCond для предотвращения дублирования запроса и / или ненужной повторной записи? Я полагаю, что это не будет иметь никакого заметного влияния на переписывание каждый раз, хотя это необязательно. Но зачем это делать. – Andrew 29 March 2016 в 02:20

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

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

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

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
5
ответ дан John Brandenburg 22 August 2018 в 08:53
поделиться

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

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]
2
ответ дан MCurbelo 22 August 2018 в 08:53
поделиться
  • 1
    Это не будет работать, как ожидалось, когда используется в .htaccess, поскольку оно просто не будет соответствовать URL-адресам в корне документа. Он будет работать в конфигурации сервера или в контексте VirtualHost. – MrWhite 7 January 2017 в 15:15

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

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

RewriteRule ^(.*)$ http://newdomain.com/ [??]
2
ответ дан Question Mark 22 August 2018 в 08:53
поделиться

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

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
ответ дан RustyIngles 22 August 2018 в 08:53
поделиться
  • 1
    Вы человек! Оно работало завораживающе :) – Radek 2 August 2015 в 17:41
  • 2
    Если вы добавите $ 1 к первому примеру, например Redirect 301 / http://example.com/$1, то все страницы исходного сайта будут перенаправлены на новый корень сайта – YassinMK 23 May 2016 в 14:17
  • 3
    @YassinMK Здесь не требуется $1, вы думаете о директиве RedirectMatch (но тогда вам все равно нужно определить группу захвата для ссылки $1 для ссылки). – MrWhite 7 January 2017 в 15:22
  • 4
    Хотя все эти директивы Redirect будут перенаправляться, например, в то время как OP хочет перенаправить только на домашнюю страницу нового сайта (хотя это само по себе не рекомендуется). Возможно, вам понадобится использовать директиву RedirectMatch, если вы хотите просто перенаправить на определенный URL-адрес. – MrWhite 7 January 2017 в 15:23
  • 5
    вместо 301 вы также можете написать Redirect Permanent / h ttps: //www.example.com, вы можете сделать это в файле vhost – Yvon Huynh 5 July 2017 в 19:20

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

Пример .htaccess

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

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

1
ответ дан Sprinterfreak 22 August 2018 в 08:53
поделиться

Если новый домен, на который вы перенаправляете свой старый сайт, находится на другом компьютере, вы можете просто использовать 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] 
6
ответ дан starkeen 22 August 2018 в 08:53
поделиться

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

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]
67
ответ дан Yuval Adam 22 August 2018 в 08:53
поделиться
  • 1
    Это будет перенаправлено на индекс по умолчанию, о чем вы говорили. Просто для ясности, поскольку из-за близости ваше утверждение, похоже, направлено на ответ пользователя968421 чуть выше этого, ответ user968421 верен, когда целью является перенаправление на соответствующее имя файла в новом домене. – RationalRabbit 8 August 2016 в 14:50
Другие вопросы по тегам:

Похожие вопросы: