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

Статус
В этой теме нельзя размещать новые ответы.

alex-bot

Nulled-Man
Регистрация
4 Май 2007
Сообщения
496
Реакции
161
Есть страница с редиректами (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-ю строку вообще не понял...
в переводе с пхп на русский она будет звучать примерно так:
если (что-то там && или не что-то там){то...}
что именно "то"?

самой задачи тоже не понял - если хотите чтобы при 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");
 
Не редиректит по очень просто причине, в этих 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 - есть, но неверный
 
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"); }
 
Вот так собрал вроде, пашет, не знаю насколько надежно ;)
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 - есть, но неверный  

?>
самой задачи тоже не понял
Там в массиве будет много урлов
но удобнее пользоваться конструкцией switch-case
Спасибо только узнал... раньше попадалась, но не вникал
К этому бы еще прикрутить рандомизацию, т.е. если при запросе q=job будет не один сайт, а несколько и рандомно бы выбирать один из них... это как то так будет выглядеть?
PHP:
$url = array(
'job' => array(url1, url2, url3)
)
 
для рандомного 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 неверный
}
 
И ещё общее замечание, если используете header , то сразу после
лучше писать exit, потому что если в браузере будет отключено перенаправление, то ваш header, может быть проигнорирован.
И это может привести иногда к обходу авторизации.
 
Советую обратить внимание еще на ф-цию ob_start();

header("Location:...") может не всегда срабоать...
Моё имхо:
Код:
function redirectTo($url)
   {
        header('HTTP/1.1 301 Moved Permanently');
        header('Location: '.$url);
        exit();
   }
 
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 - есть, но неверный
}

?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху