Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
998 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Aide URL Rewriting

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Aide URL Rewriting

n°2305206
dwarfdog
Posté le 02-09-2017 à 15:51:15  profilanswer
 

Bonjour,
 
Voilà, étant en plein développement d'un projet Web, j'aurais besoins d'aide pour la configuration du .htaccess au niveau de l'URL Rewriting.
 
Voici les URL que l'on peut trouver :  
 
 
http://forum.localhost/?P=2a9e0
http://forum.localhost/?P=bbdbe&C=1
http://forum.localhost/?P=bbdbe&F=1
http://forum.localhost/?P=ee11c&U=Modo
 
Pour le premier paramètre, un simple RewriteRule ^([a-zA-Z0-9]+)\.htm$  ?P=$1  [L,QSA] me permet d'avoir mes liens sous cette forme :  
 
http://forum.localhost/2a9e0.htm
http://forum.localhost/bbdbe.htm?C=1
http://forum.localhost/bbdbe.htm?F=1
http://forum.localhost/ee11c.htm?U=Modo
 
Mais j'aimerais obtenir ceci :
 
http://forum.localhost/bbdbe-C-1.htm
http://forum.localhost/bbdbe-F-1.htm
http://forum.localhost/ee11c-U-Modo.htm
 
Tout en conservant le deuxième paramètre. Et si il pourrait y avoir plus de deux paramètres, un simple [QSA] me suffira pour les récupérer, pas besoins que je les réécrive.
 
J'ai essayé de mettre  
 
RewriteRule ^([a-zA-Z0-9]+)\.htm$  ?P=$1  [QSA]
RewriteRule "^-([^/]+)-([^/]+)\.htm" "htm?$1=$2" [L,QSA]
 
Mais sans succès :/ (Erreur 404)
 
Et toutes les autres variantes que j'ai pu essayer m'ont donné une jolie page 500 ...
 
Si quelqu'un pouvait m'aider svp, merci d'avance :)


Message édité par dwarfdog le 02-09-2017 à 21:04:58
mood
Publicité
Posté le 02-09-2017 à 15:51:15  profilanswer
 

n°2305209
pluj
Posté le 02-09-2017 à 16:58:59  profilanswer
 

Qui gère réellement ces adresses ? (le destinataire final)
 
Parce que personnellement, si c'était destiné à un seul et même script (PHP ou peu importe), je laisserais le soin à ce dernier le parsing de ces URL, ce qui ne ferait qu'une règle générique voire un FallbackResource, ce serait bien plus simple et maîtrisable. Avec PHP, avec un coup d'explode sur - de $_SERVER['REQUEST_URI'] (ou je ne sais plus quelle variable car $_SERVER['REQUEST_URI'] peut notamment contenir la query string si je ne m'abuse) ?
 
Avec Apache, ça pourrait être possible avec quelque chose comme ça :

Code :
  1. RewriteCond %{REQUEST_FILENAME} -f [OR]
  2. RewriteCond %{REQUEST_FILENAME} -d
  3. RewriteRule ^ - [L]
  4. # Ne pas mettre de Last sur la règle qui suit
  5. RewriteRule ^([^-]+)(.*) $2?P=$1
  6. RewriteRule ([^-]+)-([^-.]+) index.php?$1=$2&%{QUERY_STRING} [N]


?


Message édité par pluj le 02-09-2017 à 19:14:06
n°2305212
dwarfdog
Posté le 02-09-2017 à 18:06:24  profilanswer
 

Tout d'abord, merci pour cette réponse très rapide pluj :)
 
Qu'entends tu par

Citation :

Qui gère réellement ces adresses ? (le destinataire final)


 
Car là, le premier paramètre gère la page, et les suivants les actions dans la page appelée. (Le premier paramètre a cet aspect car il est chiffré par mesure de sécurité)
Ensuite, grâce à cette séparation, je peux gérer chaque action dans la page concernée.
Utilisant en plus Smarty, cette indexation des variables m'est plus à l'aise à mettre en place.
 
Je viens de tester ce que tu viens de mettre (à un détail prêt, j'ai juste retiré index.php à la dernière ligne, car il n'est jamais pointé explicitement dans l'adresse)
 
J'obtiens des URL comme ceci :  
 
http://forum.localhost/bbdbe-F-1.xyz
http://forum.localhost/bbdbe-F-1.php
http://forum.localhost/bbdbe-F-1.htm
http://forum.localhost/bbdbe-F-1
 
Donnant toutes sur la page voulue.
 
Avec un paramètre supplémentaire, cela donne:  
 
http://forum.localhost/bbdbe-F-1&PAGE=3.htm
http://forum.localhost/bbdbe-F-1&PAGE=3
 
Donnant également sur la page voulu.
 
L'idéal serait d'avoir systématiquement
 
http://forum.localhost/bbdbe-F-1.htm
http://forum.localhost/bbdbe-F-1.htm&PAGE=3
ou
http://forum.localhost/bbdbe-F-1-PAGE-3.htm
 
Merci encore pour l'aide et la disponibilité :)
 

n°2305218
pluj
Posté le 02-09-2017 à 19:08:47  profilanswer
 

Que tu pourrais faire la même chose sur index.php en PHP.
 
A moins d'avoir une redirection, index.php ne doit pas apparaître côté client.
 
Je n'ai pas compris "l'histoire" de ton paramètre supplémentaire (l'URL de départ) parce que si ton utilisateur tape bbdbe-F-1-PAGE-3.htm ce serait réécrit (l'URL réelle) index.php?P=bbdbe&F=1&PAGE=3, non l'inverse ?
 
J'en suis là :

Code :
  1. # On coupe court la réécriture si ça existe physiquement
  2. RewriteCond %{REQUEST_FILENAME} -f [OR]
  3. RewriteCond %{REQUEST_FILENAME} -d
  4. RewriteRule ^ - [L]
  5. # Sinon, 1 première passe pour gérer le paramètre P (A-<...>.html devient <...>?P=A)
  6. RewriteRule ^([^-]+)(-.+)?\.htm$ $2?P=$1 [QSA]
  7. # Tant que l'URL contient -B-C<...>, on la modifie en <...>?B=C
  8. RewriteRule -([^-]+)-([^-]+)(.*) $3?$1=$2 [QSA,N]


Message édité par pluj le 02-09-2017 à 19:20:41
n°2305219
dwarfdog
Posté le 02-09-2017 à 21:04:29  profilanswer
 

Merci encore la rapidité et l'aide apportée :)
 
Effectivement, index.php n’apparaît jamais, même avec les redirections
 
Pour le paramètre supplémentaire, certaines pages (celles avec pagination) m'impose l'utilisation d'un 3ème paramètre.
Or avec le script précédant, il n'était pas pris en compte. Avec bbdbe-F-1-PAGE-3.htm, j'avais un 404
 
Mais avec ton dernier script, peu importe le nombre de paramètres, c'est pris compte.
 
Je te remercie beaucoup pour ton aide. Je comprends tout ce qui est fait, mais je suis pas encore à même de le faire par moi même :/
 
Encore merci :)
 
Pour ce qui est de le faire en php, hors mis en passant par :
 
ErrorDocument 404 /rewriting.php (par exemple)
 
Puis dans rewriting.php gérer l'URL et/ou l'erreur, je ne vois pas comment procéder sans avoir d'erreur 404.
M'enfin là n'est pas la question ^^
 
Je passerai peut-être par le php si je dois changer les - par des / ce qui n'est pas le cas pour le moment.
 
En tout cas, merci pour ton aide :)

n°2305221
pluj
Posté le 02-09-2017 à 23:32:40  profilanswer
 

Il faut vraiment préférer une réécriture ou la directive FallbackResource que j'ai précédemment évoquée pour renvoyer ce qui n'existe pas physiquement vers PHP (chose par ailleurs à éviter tant que possible, vu que c'est plus coûteux) à l'usage de ErrorDocument 404.
 
Par réécriture, j'entends cette règle :

Code :
  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteRule .* /rewriting.php [L]


 
Bref, quoi qu'il en soit et si j'ai compris, c'est à ton script PHP d'indiquer le statut final de la réponse HTTP, le plus simple étant via un appel à la fonction http_response_code.


Message édité par pluj le 02-09-2017 à 23:33:16

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Aide URL Rewriting

 

Sujets relatifs
[ASP.NET] Bizarrerie avec les URL (ne correspondent pas !)Petite aide sur du code HTML
Besoin d'une petite aide pour un novice.AtmelStudio Aide Informatique Embarquée
[Javascript] Aide html2canvas & SVGBesoin d'aide Tkinter pour l'isn
Aide fichier batch - Automatisatisation requette [NotePad++ ] Aide Projet Bac ISN
aide code source c++Url rewriting, besoin d'aide :)
Plus de sujets relatifs à : [Résolu] Aide URL Rewriting


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR