web-dev-qa-db-fra.com

Réécrire dynamiquement les URL lors de la sélection de l'utilisateur - est-ce possible?

Dans mon application Web basée sur PHP, il existe un formulaire qui génère une URL en fonction de la sélection de l'utilisateur. Le formulaire comporte 7 champs différents, chacun d'entre eux affectant l'URL finale, aucun d'entre eux n'est obligatoire.

L'URL finale peut être:

/ field1/user_setting_of_field1/field3/user_setting_of_field3/field6/user_setting_of_field6 /

ou juste:

/ field4/user_setting_of_field4

ces URL doivent être réécrites pour-

/results.php?field1=user_setting_of_field1&field3=user_setting_of_field3&field6=user_setting_of_field6

et:

/results.php?field4=user_setting_of_field4

Est-il possible de créer une seule règle de réécriture couvrant ces variations? Je détesterais créer une règle de réécriture différente pour chaque scénario possible, cela prendra une éternité ...

Je développe actuellement l'application sur un ordinateur Windows avec IIS 7.5, mais je la déploierai éventuellement sur un serveur Apache.

Est-ce possible dans les deux cas? Je dois actuellement le résoudre pour l'environnement IIS, puis pour Apache.

4
jitzo

De https://stackoverflow.com/questions/117931 Utilisez la règle de réécriture suivante pour transférer l'intégralité de l'URL dans votre script:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Ensuite, dans votre script index.php, récupérez le paramètre 'q' et divisez-le en barres obliques. Mettez les valeurs dans une carte.

$pathmap = ();
if ($_GET["q"]){
    $path = split("/", $_GET["q"]);
    for ($i=0; $i+1<count($path); $i++){
        $pathmap[$path[$i]] = $path[$i+1];
        $i++;
    }
}
2
Stephen Ostermiller