Comment supprimer le préfixe de version de l’URI de demande et utiliser la racine de document correcte?

Nous devons prendre en charge quelques versions majeures et mineures du service Web. Nous avons donc décidé d’utiliser la version dans l’URL comme ceci:

 http: // service / # dernière version déployée du service
 http: // service / 1 / # lien symbolique qui pointe vers la dernière version majeure déployée 1.x
 http: //service/1.2/ # lien symbolique qui pointe vers la dernière version mineure déployée 1.2.x

Nous stockons toutes les balises dans des dossiers et créons des liens symboliques vers les versions correctes:

 Ici le répertoire racine pour apache:
 lrwxr-xr-x 1 xxxx xxxx 28 mai 23 15:21 1 -> / home / site / tags / 20120523084844-HEAD
 lrwxr-xr-x 1 xxxx xxxx 28 avr 27 15:21 1.1 -> / home / site / tags / 20120427152123-HEAD
 lrwxr-xr-x 1 xxxx xxxx 28 mai 23 08:48 1.2 -> / home / site / tags / 20120523084844-HEAD
 lrwxr-xr-x 1 xxxx xxxx 28 mai 24 16:12 2 -> / home / site / tags / 20120524161232-HEAD
 (code source ici pour la dernière version déployée)
 .....

Il y a un problème ici, car nous aurons un préfixe de version dans le REQUEST_URI de PHP et le routeur Symfony ne le comparera pas aux modèles. Comment pouvons-nous couper ce préfixe de version, mais toujours utiliser un répertoire spécifique en tant que racine de document?

Par exemple, lorsque nous faisons une demande à l’ http://service/1.2/some/handler/pattern le code du répertoire 1.2 sera utilisé et la commande REQUEST_URI de PHP sera / some / handler / pattern.

Essaye ça:

 RewriteEngine On RewriteBase / RewriteCond $1 !^[0-9.]+/ RewriteRule ^(.*) /1.2/$1 [L] 

La seule chose à penser est que vous ne pouvez tester que la version à la fois, et que vous devez changer le htaccess si vous en voulez un différent.

Puis-je suggérer d’utiliser des sous-domaines pour la gestion des versions?

C’est un problème intéressant.

Je ne pense pas que cela puisse être fait uniquement avec htaccess, du moins pas sans hacks laids. REQUEST_URI contient toujours la requête d’origine et, pour autant que je sache, il est impossible de la modifier (si nous essayons d’atsortingbuer du contenu à la variable REQUEST_URI via E = REQUEST_URI = “quelque chose”, une variable environnementale appelée “REDIRECT_REQUEST_URI” sera créée. ).

Je ne suis pas familier avec Symfony, donc je ne sais pas combien il est facile de modifier le script qui gère le routage. Si c’est facile, vous pourriez faire quelque chose comme

 RewriteRule ^[1-9.]/(.*)$ - [R,QSA,NC,E=HANDLER:$1] 

ensuite, dans PHP, vous pouvez copier le gestionnaire sur request_uri:

 $_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_HANDLER']; 

À part changer le PHP comme ça, je ne peux que penser à ceci: d’abord redirect vers le gestionnaire, en mettant les informations de version dans la chaîne de requête. Puis attrapez cette requête et redirigez-la vers la version / handler. Le Request_uri sera défini correctement, mais il est laid et très sujet aux erreurs.

Cela dit, je suis totalement d’accord avec Gerben sur l’utilisation des sous-domaines pour la gestion des versions.