Перейти к содержимому



  • Закрытая тема Тема закрыта

Проблема с header ("Location: $url")

#1 Дилетант

Дилетант
  • Пользователь
  • 53 сообщений
  • Репутация: 0
0

Отправлено 27 Январь 2011 - 14:29

Здравствуйте, товарищи специалисты.
Проблема вот какая.
Ставлю ссылку на иной ресурс у себя в домашней страничке в виде:
http://www.mysite.ru/go.php?url=http://fz122.fss.ru/index.php?section=t&service=28
Скрипт go.php содержит:
<?php
$url = ( isset($_GET['url']) and $_GET['url'] ) ? ($_GET['url']) : 'index.php';
if ($url) { header ("Location: $url"); }
?>
В результате загружается только адрес
http://fz122.fss.ru/index.php?section=t
а service=28 после амперсанта отбрасывается.

Подскажите, пожалуйста, как мне сделать, чтобы загружался через go.php весь адрес:
http://fz122.fss.ru/index.php?section=t&service=28

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Решение проблемы "Cannot add header information - headers already sent"
  2. Проблема с header
  3. Выдача URL сайта вместо заголовка. В чем проблема?

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 27 Январь 2011 - 15:13

Можно так:
<?php
$url = ( isset($_GET['url']) and $_GET['url'] ) ? ($_GET['url']) : 'index.php';
$url .= "&service=".$_GET['service'];
if ($url) { header ("Location: $url"); }
?>

  • 0


#3 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 27 Январь 2011 - 15:25

matroskin8, я привел ссылку как пример. Могут быть и другие случаи ссылок, содержащих в себе &
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 27 Январь 2011 - 15:46

Дилетант, вам нужно перед отправкой пользователя на страницу go.php заменить в передаваемом url все & на &amр; т.к. амперсанд является служебным символом разделяющим переменные, передаваемых методом GET. Ваш скрипт понимает это дело так:
$_GET['url'] = "http://fz122.fss.ru/index.php?section=t";
$_GET['service'] = 28;

а будет так:
$_GET['url'] = "http://fz122.fss.ru/index.php?section=t&service=28";

Обратных преобразований из &amр; в & делать не нужно, это за вас сделает браузер.

ВНИМАНИЕ: специально в &amр; заменил англ. символ "p" на русский "р", чтобы движок форума не преобразовывал представление амперсанда


  • 0

#5 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 27 Январь 2011 - 15:53

Дилетант, тогда надо конкретнее задавать вопрос... в вопросе нигде не упоминалось, что это лишь пример ссылки и могут быть другие варианты.
Тогда тебе подойдет этот элемент $_SERVER['QUERY_STRING'] - он выведет все параметры, переданные через адресную строку, т.е., все, что после вопросительного знака.
<?php
$url = ( isset($_GET['url']) and $_GET['url'] ) ? ($_GET['url']) : 'index.php';
echo $_SERVER['QUERY_STRING']; // в адресной строке http://localhost/go.php?http://fz122.fss.ru/index.php?section=t&service=28 , результат - http://fz122.fss.ru/index.php?section=t&service=28
?>

  • 0


#6 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 27 Январь 2011 - 18:45

Дилетант, вам нужно перед отправкой пользователя на страницу go.php заменить в передаваемом url все & на &amр; т.к. амперсанд является служебным символом разделяющим переменные, передаваемых методом GET.

Так у меня скрипт домашней странички &amр; меняет на &.

Как мне в go.php всё это дело наладить?
  • 0

#7 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 27 Январь 2011 - 20:34

Как мне в go.php всё это дело наладить?

Дилетант, $_SERVER['QUERY_STRING'] не подошло разве?
<?php
$url = isset($_GET['url']) ? $_SERVER['QUERY_STRING'] : 'index.php';
if($url != 'index.php') $url = substr($url, 4);
header ("Location: $url");
?>

При вводе в адресную строку http://www.mysite.ru/go.php?url=http://fz122.fss.ru/index.php?section=t&service=28 переходим на http://fz122.fss.ru/index.php?section=t&service=28, если ничего не вводить, т.е., запустить срипт без параметров: http://www.mysite.ru/go.php, то попадем на http://www.mysite.ru/index.php
  • 0


#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 27 Январь 2011 - 21:12

Дилетант, вы пробовали как я сказал?
Страница с ссылкой:
<a href=".../go.php?url=<?php echo str_replace('&', '&amр;', $url)?>">ссылка с редиректом</a>

А вариант, который вам привели выше - рабочий.
  • 0

#9 Дилетант

Дилетант
    Topic Starter
  • Пользователь
  • 53 сообщений
  • Репутация: 0

Отправлено 28 Январь 2011 - 11:18

Дилетант, тогда надо конкретнее задавать вопрос...

Есть модуль go.php, приведен выше, которому передается параметр - ссылка.
Эта ссылка может быть любой. Простой или содержать служебные символы &

Если ссылка без амперсанда - всё работает без проблем, а вот ссылки вида:
http ://www.мойсайт. ru/go.php?url=http://чейтосайт.ru/index.php?параметр1=t&параметр2=28&параметрN=28
обрезается. Параметров может быть несколько.

Мне нужно в go.php перед header ("Location: $url"); переменную $url как-то снова собрать.
Поскольку & служебный, то появляется несколько переменных: параметр1, параметр2 и т.д.

---------------------------------------------------------------------------
Проверил вариант от matroskin8. Работает. Спасибо.
  • 0

#10 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 28 Январь 2011 - 11:31

Дилетант, вы все сообщения темы читаете? Да хоть 100 параметров... я же привел рабочий код, и ZiTosS привел свой вариант. Еще раз дублирую код:

<?php
$url = isset($_GET['url']) ? $_SERVER['QUERY_STRING'] : 'index.php';
if($url != 'index.php') $url = substr($url, 4);
header ("Location: $url");
?>

При вводе в адресную строку http://www.мойсайт. ru/go.php?url=http://чейтосайт.ru/index.php?параметр1=t&параметр2=28&параметрN=28 в $url попадет все, что стоит после вопросительного знака (минус параметр url), т.е., это - http://чейтосайт.ru/...28&параметрN=28. Если в скрипт параметров не попадает, т.е., обращение происходит так - http://www.мойсайт. ru/go.php , то в $url попадет index.php.

P.S. Увидел добавление:

---------------------------------------------------------------------------
Проверил вариант от matroskin8. Работает. Спасибо.

Пожалуйста... а то я уж подумал, что вы читаете сообщения через одно :)
  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru