Перенаправить весь сайт с htaccess на другой домен - PullRequest
0 голосов
/ 12 декабря 2010

Я хочу перенаправить весь сайт с одного домена на другой.Я работаю, когда объявляю RewriteRule с R = 301, но пользователь может легко заметить, что он перенаправлен на другой URL в своей навигационной панели.В результате я хочу использовать удаленный сервер для отображения контента с URL-адресом, хранящимся на локальном сервере.

Например: Типы пользователей example1.com, htaccess получает контент с example2.com (для главной страницы и каждой подстраницы).в example1.com).Сервер не перенаправляет свой браузер, а просто загружает удаленные данные с example1.com.

Он работает, когда я просто использую file_get_contentes ('example2.com ..., но возникает проблема, если есть данные $ _POST.

Ответы [ 5 ]

3 голосов
/ 12 декабря 2010

Чистое решение состоит в том, чтобы сервер, который обрабатывает example2.com, отвечал на запросы, отправленные на example1.com. Обычно это делается путем настройки виртуального хоста Apache для использования ServerName example2.com и ServerAlias example1.com.

Если вы не можете позволить себе это сделать, вам следует полагаться на реальный прокси-и-обратный прокси, а не делать это самостоятельно с PHP: это быстрее и правильно обрабатывает абсолютные URL (что происходит, если example2.com возвращает HTML который содержит <a href="http://example2.com/xxx">?). Apache имеет правильный прокси и реализацию обратного прокси.

2 голосов
/ 12 декабря 2010

Я не верю, что это возможно с .htaccess.
Не могли бы вы добавить example1.com в качестве псевдонима в httpd.conf для example2.com и изменить записи DNS для example1.com, чтобы они указывали ната же машина, что и на example2.com?

Это позволит добиться того, что вам нужно, и исключить посредника (сервер example1.com).

2 голосов
/ 12 декабря 2010

Не является ответом на ваш вопрос, но это решение не является оптимальным по ряду причин:

  1. Это зависит от работоспособности двух серверов.
  2. Это медленнее, так как запрос должен быть сделан дважды.
  3. Это занимает вдвое большую пропускную способность, и, если вы используете скрипт PHP, дополнительные ресурсы на прокси-сервере.

Вы уверены, что у есть , чтобы сделать это?

Если вы действительно это делаете, посмотрите на возможности прокси-сервера Apache вместо сценария PHP, который может решить описанную вами проблему (и несколько других, например, управление сеансом и прохождение через *).1019 * и HTTP_USER_AGENT переменных). Здесь - учебник для него.

Обратите внимание, что для этого требуется root-доступ к серверу.

1 голос
/ 12 декабря 2010

Вы не можете сделать такое перенаправление между доменами, используя только mod_rewrite. Модуль перезаписи, который записывает адрес на другом сервере, всегда будет вести себя так, как если бы он имел флаг R.

Вам, вероятно, придется использовать некоторые сценарии на стороне сервера, хотя я не уверен, как это сделать.

0 голосов
/ 12 декабря 2010

Я решил это с помощью:

$opts = array('http' =>
  array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => (isset($_POST)) ? http_build_query($_POST) : '',
  )
);

$context = stream_context_create($opts);
$result  = file_get_contents('http://example2.com/'.$_SERVER['REQUEST_URI'], false, $context);

Я понимаю, что это довольно слабое решение, но оно работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...