Простой способ сделать это:
$params = array_merge( $_GET, array( 'test' => 'testvalue' ) );
$new_query_string = http_build_query( $params );
Это не гарантирует, что test
будет в конце. Если по какой-то странной причине вам это нужно, вы можете просто сделать:
$params = $_GET;
unset( $params['test'] );
$params['test'] = 'testvalue';
$new_query_string = http_build_query( $params );
Обратите внимание, однако, что при разборе параметров строки запроса PHP могут возникнуть проблемы с совместимостью с другими приложениями. В частности, PHP не принимает несколько значений для любого параметра, если у него нет имени, похожего на массив.
Тогда вы можете просто переслать на
( empty( $_SERVER['HTTPS'] ) ? 'http://' : 'https://' ) .
( empty( $_SERVER['HTTP_HOST'] ) ? $defaultHost : $_SERVER['HTTP_HOST'] ) .
$_SERVER['REQUEST_URI'] . '?' . $new_query_string