@inkyrein
Начинаю постигать WEB-программирование

Как сделать 301 редирект с GET?

Привет всем.
Подскажите пожалуйста,
столкнулся с проблемой с настройкой ЧПУ и 301 редиректа
На сайте есть страницы:
site.com/region/section/13 - это каталог с товарами, так же есть пагинация со страницами - site.com/region/section/13?page=2...
Мне нужно сделать ЧПУ и Редирект вида:
с site.com/region/section/13 на site.com/region/section/kuhonnaja-mebel, Но если появляется GET то еще и так:
site.com/region/section/13?page=1 на site.com/region/section/kuhonnaja-mebel?page=1.
Как это можно реализовать?
пробовал через:
$sru = strtolower($_SERVER['REQUEST_URI']);
$url_array = array(
	'/region/section/13' => '/region/section/kuhonnaja-mebel',
);
if(isset($url_array[$sru])){
	header('HTTP/1.1 301 Moved Permanently');
	header('Location: http://'.$_SERVER['HTTP_HOST'].$url_array[$sru]);
	exit;
}

редиректит так только с site.com/region/section/13 на site.com/region/section/kuhonnaja-mebel... Как GET учитывать?
  • Вопрос задан
  • 2315 просмотров
Решения вопроса 1
Evervess
@Evervess
$raw_uri = $_SERVER['REQUEST_URI'];
$uri_map = array(
    '/region/section/13' => '/region/section/kuhonnaja-mebel',
);
if (count($_GET)) {
    $tmp_uri = explode('?', $raw_uri);
    $uri['address'] = strtolower($tmp_uri[0]);
    $uri['request'] = '?' . $tmp_uri[1];
} else {
    $uri['address'] = strtolower($raw_uri);
    $uri['request'] = '';
}
if (isset($uri_map[$uri['address']])) {
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $uri_map[$uri['address']] . $uri['request']);
    exit;
}


Так должно работать, не проверял
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ilyaplot
@ilyaplot
PHP программист
Взять массив $_GET, превратить его в url и приклеить справа, не?
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Надо просто подумать.
Взять и представить мысленно, чем отличается
site.com/region/section/13?page=1
от
site.com/region/section/13

И потом подумать, как из первого получить второе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы