Comment puis-je rediriger tous les sous-répertoires à la racine à l'aide htaccess ou httpd.conf?

J'ai un fichier d'index qui crée du contenu sur la base n PATH_INFO variables.

Exemple:

site.com/A/B/n/

doit utiliser index.php soit:

site.com/index.php?var1=A&var2=B&varN=n
 - or - 
site.com/index.php/A/B/n/

au lieu de:

site.com/A/B/n/index.php || which doesn't exist ||

Jusqu'à présent, j'ai essayé un certain nombre de variations de:

RedirectMatch ^/.+/.*$ /

sans succès.

J'ai un inconfort et infranchissables solution ici:

RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p1=$1 [NC,L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?p1=$1&p2=$2 [NC,L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?p1=$1&p2=$2&p3=$3 [NC,L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?p1=$1&p2=$2&p3=$3&p4=$4 [NC,L]

Problèmes avec cette solution:

  • Inélégant et infranchissables, nécessite de ligne manuel pour chaque sous-répertoire
  • Échoue avec des caractères non alphanumériques (principalement +,= et &) ex. site.com/ab&c/de+f/
    (remarque, même en changeant l'expression régulière ^([a-zA-Z0-9_-\+\=\&]+)/?$ fait peu pour aider et rend vraiment d'erreur entièrement)

Pouvez-vous aider?

Alors .. qui préférez-vous: site.com/index.php?var1=A&var2=B&varN=n (nécessite plusieurs règles) ou site.com/index.php/A/B/n/ (peut être fait avec une seule règle) ?
Je suis pour. Tout étant égal, je préfère celui avec une seule ligne.

OriginalL'auteur Ryan | 2011-07-29