2010-01-23 4 views
0

J'essaie d'utiliser mod_rewrite pour gérer un nombre inconnu de variables.mod_rewrite avec un nombre inconnu de variables

Un exemple d'URL serait:

example.com/var1-var2-var3/title

J'ai ce jusqu'à présent:

RewriteRule ^([^/.]+)-([^/]*)(.*)$ $3?version[]=$1&version[]=$2 [QSA,N] 
RewriteRule ^([^/.]+)/?$ ?title=$1 [QSA,N] 
RewriteRule ^/?$ /index.php [QSA,L] 

Ce retour: Array ([title ] => title [version] => Tableau ([0] => var1-var2 [1] => var3))

Je dois le retourner: Array ([title] => title [version] => Tableau ([0] => var1 [1] => var2 [2] => va r3))

Répondre

3

Je ne pense pas que vous pouvez saisir un nombre arbitraire d'arguments dans une seule regex RewriteRule. Ne serait-il pas plus facile de rediriger vers index.php?version=var-var2-var3 puis en PHP faire un explode() sur $_POST['version']?

EDIT: Vous pouvez le faire pour un nombre borné de vars (9 est le maximum capturé sous-groupes je crois), puis supprimez les entrées vides redondantes. Messier alors simple exploser() alternatif à mon avis, mais là, vous allez:

# Convert up to 8 arguments. 
RewriteRule ^/([^-]+)-(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?(?:([^-]+)-)?/(.*)$ index.php?t=$9&v[]=$1&v[]=$2&v[]=$3&v[]=$4&v[]=$5&v[]=$6&v[]=$7&v[]=$8 
# Strip empty ones. 
RewriteRule [?&]v\[\]=$ "" [N] 

Vous pouvez également faire une boucle compliquée en déplaçant un var au nouveau format sur chaque course du moteur de réécriture et de continuer la course jusqu'à ce que vous manquiez de vars, mais je pense que c'est plus qu'un moteur de réécriture d'URL devrait être responsable.

EDIT 2: Ok, voici la boucle je l'ai mentionné:

RewriteEngine on 
RewriteRule ^(.*)/([^/]+)$ $1&page=$2 [L] 
RewriteRule ^([^-]+)-(.*)?$ $2&v[]=$1 [L] 
RewriteRule ^(?!index\.php)([^-]+)$ /index.php?v[]=$1 [L] 

Il transform un exemple d'URL comme suit:

var1-var2-var3/title        <-- Original 
var1-var2-var3&page=title 
var2-var3&page=title&v[]=var1 
var3&page=title&v[]=var1&v[]=var2 
index.php?v[]=var3&page=title&v[]=var1&v[]=var2 <-- Final 
+0

Ce pourrait être une solution, mais la manipulation dans un RewriteRule serait plus simple. – Daniel

+0

Je cherche quelque chose de plus le long des lignes de ce http://howflow.com/tricks/apache2_mod_rewrite_google_friendly_urls Sauf séparant toutes les variables, sauf le dernier avec « - » au lieu de «/». – Daniel

+0

Ce qui est décrit sur cette page est exactement la "boucle compliquée en déplaçant un var au nouveau format sur chaque course" que j'ai mentionné. Je vais éditer dans une version qui fonctionne pour votre format. –

Questions connexes