Помогите с 301 редиректом

FRIE

Новичок
Яндекс в поиске поставил не правильную ссылку на сайт, при запросе "коробки для пиццы" выдает в выдаче ссылку (домен)/cat.php?showcat=УПАКОВКА_ДЛЯ_ПИЦЦЫ&page=1

и из-за этого не правильно показывается страница. На самом деле ссылка должна быть такая (домен)/cat.php?showcat=%D3%CF%C0%CA%CE%C2%CA%C0_%C4%CB%DF_%CF%C8%D6%D6%DB&page=1

Я хочу поставить 301 редирет чтобы яндекс изменил ссылку. Делаю вот так

Redirect 301 /cat.php?showcat=%d0%a3%d0%9f%d0%90%d0%9a%d0%9e%d0%92%d0%9a%d0%90_%d0%94%d0%9b%d0%af_%d0%9f%d0%98%d0%a6%d0%a6%d0%ab&page=1 (домен)/cat.php?showcat=%D3%CF%C0%CA%CE%C2%CA%C0_%C4%CB%DF_%CF%C8%D6%D6%DB&page=1

Но чёто не работает ((
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Если бы у тебя не было бы 279 сообщений, я бы эту тему с ссылками грохнул сразу. Но грохну только имя домена.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А менять надо место формирования ссылки, а не городить редиректы.
 

FRIE

Новичок
А менять надо место формирования ссылки, а не городить редиректы.
Просто sitemap сделал в кодировке cp-1251 а нужно было в utf 8. Яша проиндексировал и вот уже 2 месяца левые ссылки, я хоть и поменял кодировку на utf8 но яша чегото всеравно выдает не те ссылки. Мне нужно всего то на время поставить редиректы, там всего 4 раздела таких, а после переиндексации уберу и всё
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я думаю, тебе проще в файле cat.php обрабатывать и UTF-8 и cp1251, тем более что их там всего 4 раздела.
 

FRIE

Новичок
А менять надо место формирования ссылки, а не городить редиректы.
я пробовал менять место ссылки, получился треш. С "новогодней упаковкой" получилось поменять, а с "коробками для пиццы" не получилось, там трабла с кодировками (((
 

FRIE

Новичок
Я думаю, тебе проще в файле cat.php обрабатывать и UTF-8 и cp1251, тем более что их там всего 4 раздела.
Я вот так обрабатываю неправильную переменую с новогодней упаковкой
PHP:
 if($_GET['showcat']=='НОВОГОДНЯЯ_УПАКОВКА'){
	function utf8win1251($s){
    $out = $c1 = "";
    $byte2=false;
    for ($c=0;$c<strlen($s);$c++){
        $i=ord($s[$c]);
        if ($i<=127) $out.=$s[$c];
        if ($byte2){
            $new_c2=($c1&3)*64+($i&63);
            $new_c1=($c1>>2)&5;
            $new_i=$new_c1*256+$new_c2;
            if ($new_i==1025){ $out_i=168; }
            else{
                if ($new_i==1105){
                    $out_i=184; }
                    else {
                        $out_i=$new_i-848;
                    }
            }
            $out.=chr($out_i);
            $byte2=false;
        }
        if (($i>>5)==6) {
            $c1=$i;
            $byte2=true;
        }
    }
    return $out;
}
 
 $selectedrazd = utf8win1251($_GET['showcat']);
	}
А с коробками для пиццы так же не получается
 

FRIE

Новичок
Смотрю какая приходит переменная GET
echo $_GET['showcat'];

В пицце выводит РЈРџРђРљРћР’РљРђ_ДЛЯ_РџР�ЦЦЫ
В новогодней упаковке НОВОГОДНЯЯ_РЈРџРђРљРћР’РљРђ

Пропускаем всё через декодер смотрим что получается



НОВОГОДНЯЯ_РЈРџРђРљРћР’РљРђ ->НОВОГОДНЯЯ_УПАКОВКА


Коробки для пиццы РЈРџРђРљРћР’РљРђ_ДЛЯ_РџР�ЦЦЫ -> УПАКОВКА_ДЛЯ_П��ЦЦЫ - вот тут засада какая то с буквой "И"
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А никто не говорил, что второй байт UTF-8 символа должен быть именно печатным в другой кодировке.
 

fixxxer

К.О.
Партнер клуба
А ты хотел, чтобы при некорректных перекодировках ничего не попортилось? В урле вообще кириллицы в 1251 быть не может и не должно, а у тебя вообще левая двойная перекодировка.

Составь списки корректных значений, с минимальными префиксами, и ищи там.
Ну типа того
PHP:
$categories = array('Пер'=>'Первый пункт','Вто'=>'Второй пункт', 'Тре'=>'Третий пункт');
$category = $_GET['showcat'];
if (!in_array($category, $categories)) {
    // try to decode garbled data
    $category_decoded = iconv('UTF-8//IGNORE', 'CP1251', $category);
    foreach ($categories as $prefix => $value) {
        if (strncmp($prefix, $category_decoded, strlen(prefix)) {
            redirect to $value category and exit;
        }
    }
}
А вообще что-то у тебя криво все сделано, нафига такое в урле таскать-то?
 

FRIE

Новичок
всё на... удалю сайт и отправлю на переиндексацию, такой гемор..
Сайт вобще был сделан в каком то лохматом году, он связан с внутренним сайтом и 1С, и везде значения в русских символах и этой проклятой cp-1251, его переделывать тупо лень
 
Сверху