web-dev-qa-db-fra.com

Réécrivez jusqu'à trois dossiers dans trois paramètres de chaîne de requête en un script PHP

J'aimerais utiliser mod_rewrite dans le fichier .htaccess pour réécrire les dossiers dans un var string. Vous trouverez ci-dessous des exemples de courant et de ce que je préférerais.

  • RL actuelle: example.com/main/folder1/folder2/folder3
  • RL préférée: example.com/parser.php?var1=folder1&var2=folder2&var3=folder3

Comment puis-je réécrire les URL actuelles sur les URL préférées?

4
exarhis

Vous pouvez utiliser ces trois règles de réécriture qui gèrent jusqu'à 3 niveaux de répertoires:

RewriteEngine on
RewriteRule ^main\/([^\/]+)\/([^\/]+)\/([^\/]+)\/? /parser.php?var1=$1&var2=$2&var3=$3 [L]
RewriteRule ^main\/([^\/]+)\/([^\/]+)\/?  /parser.php?var1=$1&var2=$2 [L]
RewriteRule ^main\/([^\/]+)\/?  /parser.php?var1=$1 [L]

Dans ces expressions régulières:

  • ^main\/: commence par "main /"
  • ([^\/]+): un groupe de caractères qui ne sont pas des barres obliques (dans un groupe de capture à extraire avec $1, $2 ou $3)
  • \/? une barre oblique de fin optionnelle
  • [L] la dernière règle de réécriture (afin que les règles de réécriture ultérieures ne soient pas aussi déclenchées)

Je préfère généralement passer tous les dossiers comme une seule variable, comme ceci:

RewriteEngine on
RewriteRule ^main\/(.*) /parser.php?folders=$1

alors votre analyseur PHP pourrait scinder les dossiers de la barre oblique pour obtenir les trois variables souhaitées.

5