Почему не редиректит?

Тема в разделе "PHP", создана пользователем alex-bot, 16 окт 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. alex-bot

    alex-bot Nulled-Man

    Регистр.:
    4 май 2007
    Сообщения:
    497
    Симпатии:
    144
    Есть страница с редиректами (redirect.php), не пойму почему не срабатывает если набрать:
    redirect.php?q=job - работает
    redirect.php?q=jobs (с ошибкой не уходит на резервный урл)
    или если просто попасть на
    redirect.php - тоже не редиректит на резервный урл?
    Сам ковырялся, так и не понял как правильно проверить переменную
    PHP:
    <?php
    $reserved_url 
    "http://google.ru";

    if(isset(
    $_GET['q']) && !empty($_GET['q'])) {}; $sid = ($_GET['q']);
    if(
    $sid == '') { 
    header("Location: ".$reserved_url); //если q вообще пустой


    $url = array(
    'job' => 'http://domen.ru/job.php',
    );

    $r trim($url["$sid"]);
    if(isset(
    $url) && !empty($url)) header("Location: ".$r);
    else 
    header("Location: ".$reserved_url); //если q - есть, но неверный

    ?>
     
  2. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    2-ю строку вообще не понял...
    в переводе с пхп на русский она будет звучать примерно так:
    если (что-то там && или не что-то там){то...}
    что именно "то"?

    самой задачи тоже не понял - если хотите чтобы при redirect.php?q=jobs попадали на domen.ru/jobs.php то просто допишите в массив
    PHP:
    'jobs' => 'http://domen.ru/jobs.php',
    по поводу
    вместо
    PHP:
    header("Location: ".$reserved_url);
    пропишите
    PHP:
    header("Location: $reserved_url");
     
    alex-bot нравится это.
  3. Delk0

    Delk0

    Регистр.:
    26 мар 2010
    Сообщения:
    284
    Симпатии:
    47
    Не редиректит по очень просто причине, в этих 2 строках
    PHP:
    if(isset($url) && !empty($url)) header("Location: ".$r);
    else 
    header("Location: ".$reserved_url); //если q - есть, но неверный
    проверяется существует ли и не пустой ли массив $url, а он всегда будет существовать, потому как объявлен выше :)
    Я думаю, так будет правильней:
    PHP:
    if(isset($url["$sid"]) && !empty($url["$sid"])) header("Location: ".$r);
    else 
    header("Location: ".$reserved_url); //если q - есть, но неверный
     
    alex-bot нравится это.
  4. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    PHP:
    $reserved_url "http://google.ru";

    $sid $_GET['q'];
    if(!
    strlen($sid)) header("Location: $reserved_url"); //если q вообще пустой

    $url = array(
    'job' => 'http://domen.ru/job.php',
    );

    $r trim($url[$sid]);
    if(
    strlen($r)) header("Location: $r");
    else 
    header("Location: $reserved_url"); //если q - есть, но неверный
    но удобнее пользоваться конструкцией switch-case

    PHP:
    switch ($_GET['q']) {
    case 
    "job"header("Location: http://domen.ru/job.php"); break;
    case 
    "jobs"header("Location: http://jobs.ru/"); break;
    default : 
    header("Location: http://google.ru"); }
     
    alex-bot нравится это.
  5. alex-bot

    alex-bot Nulled-Man

    Регистр.:
    4 май 2007
    Сообщения:
    497
    Симпатии:
    144
    Вот так собрал вроде, пашет, не знаю насколько надежно ;)
    PHP:
    <?php
    //error_reporting(E_ERROR);
    $reserved_url "http://google.ru";
    $reserved_url2 "http://yandex.ru";
    if(!isset(
    $_GET['q'])) {
    header("Location: $reserved_url"); //если q вообще пустой
    exit; 
    }
    //

    if(isset($_GET['q'])) $sid = ($_GET['q']);
    $url = array(
    'job' => 'http://domen.ru/',
    'job2' => 'http://domen2.ru/',
    'job3' => 'http://domen3.ru/'
    );
    //$r = trim($url["$sid"]);
    if(isset($url["$sid"]) && !empty($url["$sid"])) header("Location: ".trim($url["$sid"]));
    else 
    header("Location: ".$reserved_url2); //если q - есть, но неверный  

    ?>
    Там в массиве будет много урлов
    Спасибо только узнал... раньше попадалась, но не вникал
    К этому бы еще прикрутить рандомизацию, т.е. если при запросе q=job будет не один сайт, а несколько и рандомно бы выбирать один из них... это как то так будет выглядеть?
    PHP:
    $url = array(
    'job' => array(url1url2url3)
    )
     
  6. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    для рандомного url из массива:
    PHP:
    $url = array(
    'job' => array('http://s1.ru/','http://s2.ru/','http://s3.ru/'),
    'job2' => 'http://domen2.ru/',
    'job3' => 'http://domen3.ru/'
    );


    $q $_GET['q'];
    switch (
    $q) {
    case 
    ""header("Location: http://google.ru/"); break; // q пустой
    case $q: if(is_array($url[$_GET['q']])) break(header("Location: ".$url[$q][array_rand($url[$q])])); // q массив - random
    elseif($url[$q]) break(header("Location: ".$url[$q])); // q верный
    default : header("Location: http://yandex.ru"); // q неверный
    }
     
    alex-bot нравится это.
  7. PHPCod3r

    PHPCod3r

    Регистр.:
    7 июн 2010
    Сообщения:
    261
    Симпатии:
    25
    И ещё общее замечание, если используете header , то сразу после
    лучше писать exit, потому что если в браузере будет отключено перенаправление, то ваш header, может быть проигнорирован.
    И это может привести иногда к обходу авторизации.
     
    alex-bot нравится это.
  8. sublimity

    sublimity Создатель

    Регистр.:
    7 янв 2008
    Сообщения:
    23
    Симпатии:
    3
    Советую обратить внимание еще на ф-цию ob_start();

    header("Location:...") может не всегда срабоать...
    Моё имхо:
    Код:
    function redirectTo($url)
       {
            header('HTTP/1.1 301 Moved Permanently');
            header('Location: '.$url);
            exit();
       }
    
     
  9. DarkDaNTe

    DarkDaNTe Писатель

    Регистр.:
    16 окт 2010
    Сообщения:
    6
    Симпатии:
    0
    PHP:
    $reserved_url "http://google.ru";

    if(isset(
    $_GET['q']) && !empty($_GET['q'])) {}; $sid = ($_GET['q']);
    if(
    $sid == '') { 
    header('Location: '.$reserved_url); //если q вообще пустой


    $url = array(
    'job' => 'http://domen.ru/job.php'
    );

    $r trim($url[$sid]);
    if(isset(
    $url) && !empty($url)){
       
    header('Location: '.$r);
    }else{
       
    header('Location: '.$reserved_url); //если q - есть, но неверный
    }

    ?>
     
Статус темы:
Закрыта.