Перенаправить с параметром PHP и пропустить указанный c - PullRequest
0 голосов
/ 28 мая 2020

С тех пор, как я начал использовать удобные URL-адреса на своем веб-сайте, я перенаправляю каждую страницу на новую версию, только если зарегистрированный пользователь имеет «имя пользователя» в своем профиле.

Итак , Я перенаправляю с:

https://tribbr.me/post.php?id=850

с:

header("Location:/".$if_username."/post/".$post_id."?".$_SERVER['QUERY_STRING']); exit();

Чтобы сохранить все параметры GET .... но проблема в том, что этот запрос заголовка, очевидно с $_SERVER['QUERY_STRING'], также добавляет идентификатор сообщения к URL-адресу, и при перенаправлении это конечный URL-адрес:

https://tribbr.me/TribeMasters/post/850?id=850

Можно ли просто пропустить параметр id=850 при перенаправлении URL? Поскольку это дублированный параметр: post/850 и id=850 одинаковы.

Спасибо, что помогли мне :)

Ответы [ 2 ]

1 голос
/ 28 мая 2020

@DE_ - лучший ответ. Но если вы не знакомы с Regex, это альтернативный способ.

function removeGetParam($param){

 $params = $_GET;

 // removing the key
 unset($params[$param]); 

 // joining and returning the rest
 return implode(',', array_map(function ($value, $key) { 
            return $key.'='.$value;
          },$params, array_keys($params))
        );
}

$filtered_params = removeGetParam('id');
header("Location:/".$if_username."/post/".$post_id."?".$filtered_params);
1 голос
/ 28 мая 2020

Дэвид Уол sh сделал хорошую статью по этому поводу

https://davidwalsh.name/php-remove-variable

function remove_querystring_var($url, $key) { 
    $url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&'); 
    $url = substr($url, 0, -1); 
    return $url; 
}
...