atm J'utilise les quatre lignes suivantes pour rediriger l'utilisateur vers une autre page de mon site Web:
<?php
header("Status: 301 Moved Permanently");
header("Location: ./content/index.html");
exit;
?>
mais il y a un problème avec l'utilisation de variables de chaîne de requête HTTP comme http://< url >?param=blah
ils ne sont pas ajoutés à l'url de façon compréhensible.
Existe-t-il une solution intelligente pour mettre en œuvre cela?
salutations
<?php
header("Status: 301 Moved Permanently");
header("Location:./content/index.html?". $_SERVER['QUERY_STRING']);
exit;
?>
Pour effectuer la redirection et vous assurer qu'un point d'interrogation supplémentaire n'apparaît pas lorsque la chaîne de requête n'est pas transmise, utilisez ce qui suit
function preserve_qs() {
if (empty($_SERVER['QUERY_STRING']) && strpos($_SERVER['REQUEST_URI'], "?") === false) {
return "";
}
return "?" . $_SERVER['QUERY_STRING'];
}
header("Status: 301 Moved Permanently");
header("Location: ./content/index.html" . preserve_qs());
Je voudrais ajouter une option de plus ...
Quoi qu'il en soit - comme d'autres l'ont dit, utiliser (. Htaccess) mod_rewrite serait probablement la meilleure option.
Cependant,
il peut sûrement y avoir de nombreuses situations où vous devez le faire en PHP => vous avez 2 options:
$_SERVER['QUERY_STRING']
http_build_query($_GET);
Option 2. - Avantages (+)
$_GET
comme:$_GET['new_param']="new value";
(Ajouter)unset($_GET['param_to_remove']);
(supprimer)$_GET
=> indépendant de l'environnementhttp_build_query()
peut en fait être N'IMPORTE QUEL tableau ou objet afin que vous puissiez construire une requête de type $_GET
à partir de $_POST
ou $o = new YourObject();
si nécessaireOption 2. - Inconvénients (-)
Pour plus d'informations, voir http://www.php.net/manual/en/function.http-build-query.php - a PHP site du manuel sur le http_build_query()
fonction qui Returns a URL-encoded string.
En utilisant $_SERVER['QUERY_STRING']
et l'ajouter à la fin de votre redirection pourrait être ce que vous recherchez.
EDIT: Je viens de remarquer que j'étais un peu en retard avec ma réponse.
Tout d'abord, pourquoi ne pas rediriger avec la réécriture du mod?
Mais de toute façon, vous pouvez concaténer $ _SERVER ['QUERY_STRING'] à la fin de votre URL
Je suggère également d'utiliser mod_rewrite pour cette tâche, vous pouvez être plus flexible.
Ajoutez le $_SERVER['REQUEST_URI']
Ou le QUERY_STRING
. Faites une print_r($_SERVER);
pour voir plus d'informations sur l'URL demandée.