2010-06-18 7 views
0

Je Cond ai actuellement le code suivant:des variables facultatives avec Rewrite

RewriteCond %{REQUEST_URI} !assets/ 
RewriteCond %{REQUEST_URI} !uploads/ 
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+) index.php?method=$1&value=$2 [NC,L] 

Cela fonctionne parfaitement pour rediriger page/home 'à « index.php method = Page & valeur = home?. Cependant, à certains points, j'ai besoin d'ajouter une variable supplémentaire ou deux à la chaîne de requête comme 'admin/useraccounts/mod/2'. Quand je clique simplement sur des bits à la fin de la règle de réécriture cela fonctionne si toutes les variables sont 'page/home/rand/rand' ou 'admin/useraccounts/mod/2', mais s'il manque quelque chose comme 'page/la maison 'Je reçois un 404.

Qu'est-ce que je fais mal?

Merci beaucoup.

+0

Pourriez-vous utiliser '$ _SERVER [ « REQUEST_URI »]' 'dans index.php' et analyser les informations restantes? – gnarf

Répondre

0

Cela devrait fonctionner:

RewriteCond %{REQUEST_URI} !assets/ 
RewriteCond %{REQUEST_URI} !uploads/ 
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(?:/([a-z|0-9_&;=-]+))?(?:/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$3&opt2=$4 [NC,L] 

(?) Est un groupe non de capture et? après cela le rend facultatif. Je ne suis pas sûr si les groupes non capturants fonctionnent dans mod_rewrite, si vous n'utilisez pas les groupes normaux, prenez juste soin d'utiliser le bon nombre après $ pendant l'extraction des valeurs. Comme ici:

RewriteCond %{REQUEST_URI} !assets/ 
RewriteCond %{REQUEST_URI} !uploads/ 
RewriteRule ^([a-z|0-9_&;=-]+)/([a-z|0-9_&;=-]+)(/([a-z|0-9_&;=-]+))?(/([a-z|0-9_&;=-]+))? index.php?method=$1&value=$2&opt1=$4&opt2=$6 [NC,L] 

Les groupes sont numérotés comme si vous deviez numéroter leurs bretelles d'ouverture de gauche à droite à partir de 1.

+0

Merci Kamil, fonctionne parfaitement! Je comprends le? pour le rendre facultatif, mais pouvez-vous simplement expliquer ce que vous entendez par «groupes non capturants» s'il vous plaît? –