Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: перенаправлять один домен на другой
 
 автор: 1prom   (12.03.2012 в 01:51)   письмо автору
 
 

Здравствуйте!

На сайте есть один домен.
Возможно ли сделать перенаправление поестителей на другой домен (сайт тот же), но что бы куки сохранились те же?


Спасибо

  Ответить  
 
 автор: Sfinks   (12.03.2012 в 13:27)   письмо автору
 
   для: 1prom   (12.03.2012 в 01:51)
 

А почему вопрос в разделе JS? Это нужно на JS сделать?
______
Напрямую нельзя. Но можно перенаправить передав куки через GET на целевом домене на промежуточный скрипт, который переустановит куки уже для нового домена и сделает еще один редирект без GET строки на нужный адрес, но уже в пределах текущего домена.

  Ответить  
 
 автор: 1prom   (12.03.2012 в 23:28)   письмо автору
 
   для: Sfinks   (12.03.2012 в 13:27)
 

Нет. Не знал как технически это делается. (если можно перенести тему - пожалуйста, модераторы, пренесите)

Можете пример предоставить?

Нужно:
1) Выбрать в пользователя все куки по домену domen1.com
2) Перенести записать все куки на domen2.com
3) Перенаправить пользователя на domen2.com

  Ответить  
 
 автор: Sfinks   (12.03.2012 в 23:37)   письмо автору
 
   для: 1prom   (12.03.2012 в 23:28)
 

> Выбрать в пользователя все куки по домену domen1.com
При любом обращении к domen1.com, или на конкретном адресе?

[UPD] И если при любом обращении, то может ли в исходном урл быть GET-строка? Если может, то нужно ли ее передавать?

> Перенаправить пользователя на domen2.com
На новый конкретный адрес или на тот же, который был на domen1.com, но на domen2.com?

  Ответить  
 
 автор: 1prom   (12.03.2012 в 23:52)   письмо автору
 
   для: Sfinks   (12.03.2012 в 23:37)
 

1) Выбрать в пользователя все куки по домену domen1.com при любом обращении к domen1.com

2) domen1.com и domen2.com ссылаются на один и тот же сервер (сайт). Нужно просто масово пользователей приучить к новому адресу...

  Ответить  
 
 автор: Sfinks   (13.03.2012 в 00:14)   письмо автору
 
   для: 1prom   (12.03.2012 в 23:52)
 

в .htaccess сайта domen1.com пишите строки:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ http://domen2.com/redirect.php?cookies=%{HTTP_COOKIE}&url=$1 [R=301,L,QSA]

На domen2.com в корне создаете redirect.php с таким содержанием:
<?php

  $cookies 
explode"; " $_GET['cookies'] );

  foreach( 
$cookies as $val )
    {
    list( 
$cName $cVal ) = explode"=" $val );
    
setcookie$cName $cVal );
    }
  
$redirect $_GET['url'];
  unset( 
$_GET['cookies'] , $_GET['url'] );

  
$qs = array();
  foreach( 
$_GET as $key => $val )
    
$qs[] = $key "=" urlencode$val );
  
$qs implode"&" $qs );

  
header"Location: http://" $_SERVER['SERVER_NAME'] . "/" $redirect "?" $qs );

?>

  Ответить  
 
 автор: 1prom   (13.03.2012 в 00:36)   письмо автору
 
   для: Sfinks   (13.03.2012 в 00:14)
 

Я понимаю этот скрипт вызывается постоянно.
Как поставить условие, что бы он вызывался только при простотре domen1.com

  Ответить  
 
 автор: Sfinks   (13.03.2012 в 00:46)   письмо автору
 
   для: 1prom   (13.03.2012 в 00:36)
 

> при простотре domen1.com
при чем?

  Ответить  
 
 автор: 1prom   (13.03.2012 в 00:48)   письмо автору
 
   для: Sfinks   (13.03.2012 в 00:14)
 

Возникла ошибка:

Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.

  Ответить  
 
 автор: Sfinks   (13.03.2012 в 00:54)   письмо автору
 
   для: 1prom   (13.03.2012 в 00:48)
 

Начните по этому вопросу новую тему в разделе Апач. Там кто-нить поможет. А в эту тему уже могут и не посмотреть. Кроме того тут проводится такая политика, что под каждый новый вопрос желательно заводить новую тему.

  Ответить  
 
 автор: Sfinks   (13.03.2012 в 02:19)   письмо автору
 
   для: 1prom   (13.03.2012 в 00:48)
 

Кстати, я вот сейчас подумал.....

Перенаправляя пользователя автоматически, вы врядли его к чему-то приучите. Т.е. я набрал domen1.com, меня перекинуло на domen2.com, а я этого даже не заметил. В следующий раз я снова зайду на domen1.com. А т.к. обновление кук на domen1.com не происходит, а устанавливаются они на domen2.com, то скоро на domen1.com они перестанут существовать (если они у вас, конечно, не до 2020 года установлены) и весь "фокус" потеряет смысл.

Поэтому лучше бы сделат по другому: Вывести страницу с информацией о том, что сайт переехал и кнопку "перейти на новый сайт". А в форму с кнопкой скрытыми полями занести все куки. И данные формы передавать методом POST, а не GET. Это и возникшую ошибку исключит. А уже на новом домене прочитать все данные формы и установить куки.

  Ответить  
 
 автор: 1prom   (13.03.2012 в 02:32)   письмо автору
 
   для: Sfinks   (13.03.2012 в 02:19)
 

Так можно, но в крайнем случае, так как первый домен остается тоже рабочим.
Единственное, что ряд сервисов сайта привязаны к новому домену. Раздвоение доменов мешает единству публикаций и иерархии с другими соц. сетями, которые прривязаны только к доменам, отнудь не к серверам. Вот почему желательно сделать это незаметно.

  Ответить  
 
 автор: 1prom   (12.03.2012 в 23:54)   письмо автору
 
   для: Sfinks   (12.03.2012 в 23:37)
 

"может ли в исходном урл быть GET-строка? Если может, то нужно ли ее передавать?" - тут я не понимаю, на безопасность это влияет или на другое что-то. Впринципе разница не принципиальна как это сделается

  Ответить  
 
 автор: ЯСА   (13.03.2012 в 04:01)   письмо автору
 
   для: 1prom   (12.03.2012 в 01:51)
 

1. Имеете адреса http://domen1.ru и http://domen2.ru
2. Перед редиректом с 1-го на 2-й:
-- читаете куки, поставленные страницами с адреса http://domen1.ru
-- записываете содержимое кук в имени окна браузера (window.name = document.cookie;)
3. После редиректа читаете куки, поставленные страницами с адреса http://domen2.ru
4. Если "вторых" кук нет вовсе, то ставите их из имени окна.Если "вторые" есть... то тут думайте сами - клиент уже был по новому адресу, но зашёл почему-то со старого.
5. Имя окна обнуляете (window.name = '';)

  Ответить  
 
 автор: 1prom   (13.03.2012 в 23:47)   письмо автору
 
   для: ЯСА   (13.03.2012 в 04:01)
 

window.name = document.cookie; - таким образом запишутся все куки?
Как прочитать все куки и узнать есть ли они и как записать их?

Дайте код, пожалуйста

  Ответить  
 
 автор: ЯСА   (14.03.2012 в 06:18)   письмо автору
 
   для: 1prom   (13.03.2012 в 23:47)
 

1. Конкретная страница домена может прочитать только те куки, к которым у неё есть доступ.

2. Доступ к кукам в пределах домена определяется при их прописывании параметром path.
Если вы path при установке не прописывали, то, по умолчанию, куки доступны только той странице, которая их установила.

3. Код для чтения ВСЕХ кук, доступных странице: var kuki = document.cookie;

  Ответить  
 
 автор: 1prom   (16.03.2012 в 00:18)   письмо автору
 
   для: ЯСА   (14.03.2012 в 06:18)
 

Нужно:
1) Выбрать в пользователя все куки по домену domen1.com
window.name = document.cookie;
это есть.

Теперь как лучше сделать незаметно для посетителя? сначала перенаправить на новый домен и потом прописать куки или наоборот перенаправить а потом прописать куки на новом домене?


Перенаправить пользователя на domen2.com я знаю
<?
echo "<html><head><meta http-equiv='refresh' content='0; url=domen2.com'></head></html>"; die();
?>


а вот как записать на domen2.com все куки - я так и не понял

  Ответить  
 
 автор: ЯСА   (16.03.2012 в 01:42)   письмо автору
 
   для: 1prom   (16.03.2012 в 00:18)
 

1. Интересно, что в вашем понимании - "незаметно"?
Куки - они же не калёным железом на лбу посетителя прописываются :-)

2. Вы вообще себя самого прочитали?
Цитирую: "сначала перенаправить на новый домен и потом прописать куки или наоборот перенаправить а потом прописать куки на новом домене?"
Перефразирую по мотивам известной в 90-х годах песни: "утром встать, одеть трусы, затем надеть часы или наоборот, - встав утром, одеть трусы и не забыть надеть часы?":-)

3. Код приблизительно таков:

3.1. Индексная страница сайта на домене1 следующего вида:
<html>
<head>
<script>
window.name = document.cookie;
window.location.href = 'http://domen2.com';
</script>
</head>
</html>

Перенаправление с помощью META-тега УБЕРИТЕ.
Совсем уберите.
И ничего другого на этой странице быть уже не должно.

3.2.Индексная страница сайта на домене2:
<html>
<head>
<script>
if (!document.cookie) document.cookie = window.name;
else //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал
window.name = '';
</script>
...прочее содержание индексной страницы домена2

  Ответить  
 
 автор: 1prom   (16.03.2012 в 03:32)   письмо автору
 
   для: ЯСА   (16.03.2012 в 01:42)
 

С кодом очень помогли, спасибо.
"Незаметно" - это когда лишь в адресной строчке изменение адресов.
А заметно, - это когда юзеру предлагают где-то нажать, "потыкать" что бы все удачно сохранилось :)

  Ответить  
 
 автор: ЯСА   (16.03.2012 в 10:52)   письмо автору
 
   для: 1prom   (16.03.2012 в 03:32)
 

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

2. Исправляю эту свою оплошность.
В коде на индексной странице домена2 надо проверить и этот вариант:
<html>
<head>
<script>
if (!window.name) void (1); //юзер, который зашёл впервые - куки ему поставит новый сайт
else
 if (!document.cookie) document.cookie = window.name;
else //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал
window.name = '';
</script>
...прочее содержание индексной страницы домена2

  Ответить  
 
 автор: 1prom   (17.03.2012 в 15:46)   письмо автору
 
   для: ЯСА   (16.03.2012 в 10:52)
 

перенаправление идет, а вот куки не пишет в броузер на втором домене. Пробовал на Опере и Мозилла.
Можно проверить где ошибка?

  Ответить  
 
 автор: ЯСА   (17.03.2012 в 16:02)   письмо автору
 
   для: 1prom   (17.03.2012 в 15:46)
 

Можно, конечно.

1. Надо проверить сначала на первом домене, дописав посередине (перед window.location.href = ...) строчку alert (unescape (window.name)) и посмотреть - записались ли в имя окна текущие куки

2. Аналогичную строку надо записать и самой первой на втором домене. Передались ли? (Хотя куда они денутся?)

3. В итоге у вас по-любому должны появиться два окошка алерта с одинаковым содержанием.
Или с одинаковой пустотой - если исходные куки не прочитались.
А не прочитаться они не могли в двух случаях:
а) либо их просто нет;
б) либо они есть, но недоступны индексной странице сайта на первом домене. Потому что ставились эти куки не индексной страницей, а какими-то другими страницами сайта на первом домене (с другими URL*). И вы при установке кук не позаботились выставить параметр path="/", делающий куки доступными любой странице сайта.

4. Разумеется, и вариант б) тоже можно решить... но сначала проверьте два алерта.

Примечание: URL страницы - штука уникальная. Если куки поставлены без параметра path="/" страницей с именем index.html, то и прочитать их сможет только страница с точно таким же именем. А вот уже index.htm или index.php - не смогут.

  Ответить  
 
 автор: 1prom   (17.03.2012 в 22:38)   письмо автору
 
   для: ЯСА   (17.03.2012 в 16:02)
 

Алерты оба работают, значит куки передаются.
Но на новом домене почему то не пишутся в броузер
Напр. кука user: пустая (В Опере смотрю куки...)

Также нет авторизации при последующем запросе

$sqlsee = "SELECT * FROM regpeople where mail_admin = \"$user\" and passw = \"$passw\"";

  Ответить  
 
 автор: ЯСА   (18.03.2012 в 10:12)   письмо автору
 
   для: 1prom   (17.03.2012 в 22:38)
 

Странно...

Попробуйте изменить одну строчку в коде второго домена:
if (!document.cookie) document.cookie = unescape (window.name); 

  Ответить  
 
 автор: 1prom   (18.03.2012 в 17:50)   письмо автору
 
   для: ЯСА   (18.03.2012 в 10:12)
 

Смотрите, может я не все сказал, но у меня есть auto_prepend_file = "menu.php". В нем я пишу:




$wh_domen=$_SERVER["HTTP_HOST"];
$fc = $_SERVER['PHP_SELF'];

if($wh_domen=="domen1.com"){
?>
<html> 
<head> 
<script> 
window.name = document.cookie;
window.location.href = 'http://domen2.com<?=$fc?>'; 
</script> 
</head> 
</html> 

<?
}




if(
$wh_domen=="domen2.com"){
?>
<script>
if (!window.name) void (1); //юзер, который зашёл впервые - куки ему поставит новый сайт
else if (!document.cookie) document.cookie = unescape (window.name); 
else //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал 
window.name = '';
</script> 
<?
}

  Ответить  
 
 автор: ЯСА   (18.03.2012 в 19:01)   письмо автору
 
   для: 1prom   (18.03.2012 в 17:50)
 

Я не знаю, что такое auto_prepend_file
-----

Всякие куки, только что поставленные, тут же можно и прочитать.

Поэтому, для проверки в файле второго домена:
<script>
alert (unescape (window.name)); //куки пришли
if (!window.name) void (1); //юзер, который зашёл впервые - куки ему поставит новый сайт
else if (!document.cookie) {document.cookie = unescape (window.name); alert (unescape (document.cookie))} //куки поставлены, прочитаны и отображены
else void 1(); //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал 
window.name = '';
</script>


Походу Вы так и оставили моё замечание "здесь решайте сами...".
Надо было именно РЕШАТЬ, а не тупо переписывать.
Это синтаксическая ошибка - из-за этого у вас ничего и не работает.
А глянуть в "Консоль ошибок" браузера вам что не даёт?

  Ответить  
 
 автор: 1prom   (17.03.2012 в 15:48)   письмо автору
 
   для: ЯСА   (16.03.2012 в 10:52)
 

пост подвоен, удалите его, модератор

  Ответить  
 
 автор: 1prom   (16.03.2012 в 03:39)   письмо автору
 
   для: ЯСА   (16.03.2012 в 01:42)
 

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

  Ответить  
 
 автор: Sfinks   (16.03.2012 в 20:06)   письмо автору
 
   для: 1prom   (16.03.2012 в 03:39)
 

Вы поймите, что 2 разных домена - это 2 изолированных области видимости. Между ними черная глухая непрозрачная стена!!! Невозможно находясь на одном домене установить куки для другого или перейти на другой и посмотреть что было на первом. НУ НЕ ВИДНО СКВОЗЬ СТЕНУ!!! Но стену можно как-то перекинуть или еще как-то вывернуться. Перекинуть - это как я написал. Т.е. стандартно передать данные. Но у вас там похоже 100 килограмм кук и перекинуть их не получается. Значит нужно выворачиваться! Например прилепить на потолок над стеной зеркало и в нем посмотреть что же там за стеной. Зеркалом на потолке вам предлагают использовать заголовок окна. Т.е. ставите стремянку и прикручиваете к потолку зеркало. Потом слазиете, открываете дверь и уходите за стену. Там поднимаете голову и смотрите в зеркало. Вот и все. Куки никуда не передаются. Они где были там и есть. Просто их отразили в общедоступную зону.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования