2010-07-13 3 views
1

Je voudrais rediriger tous les répertoires de premier niveau vers un fichier en utilisant mod_rewrite.mod_rewrite: rediriger les répertoires de premier niveau vers un fichier

Donc, ce qui suit devrait rediriger là:

- http://example.com/test 
- http://example.com/test8/ 
- http://example.com/test_9231/ 

Ne devraient pas rediriger là:

- http://example.com/test.php 
- http://example.com/test_9231/test/ 
- http://example.com/test/test.php 
- http://example.com/test_9231/test 

Aucun des répertoires existent physiquement. Les noms de répertoire ne contiendront que ces caractères: A-Za-z0-9_-

J'ai essayé ce RewriteRule /(.*) /index.php [L] mais les sous-répertoires sont toujours redirigés.
Je pensais que l'ajout d'une barre oblique après la deuxième parenthèse ferait l'affaire, mais il a juste cassé la redirection.

Répondre

2
RewriteRule ^/[A-Za-z0-9_-]+/?$ /index.php 

Cela correspondra à une barre oblique, puis un nom selon vos spécifications, puis une autre barre oblique en option, puis fin de chaîne, de sorte que les sous-répertoires ne correspondront pas

+0

J'obtiens l'erreur 404 lors du passage à http://example.com/test/ –

+0

faites-vous cela dans .htaccess? Avez-vous d'autres règles de réécriture? – unbeli

+0

Oui, dans .htaccess. J'ai d'autres règles, mais j'ai testé votre code sans eux et j'ai obtenu le même résultat. –

0
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/?[^/]+/?$ /index.php [L] 
+0

Tout va bien, sauf que http://example.com/test.php redirige aussi –

+0

Ouais, n'a pas pris la peine d'attraper le '.', Comme je l'ai supposé soit un fichier existe ou vous voudriez créer un belle page 404 en PHP lui-même (je voudrais, personne n'est aidé avec générique 404, une belle page avec des conseils et/ou formulaire de recherche serait préférable à mon humble avis). Cependant, ce n'était pas la question, et en fait, cela ne correspond pas au projet de loi. – Wrikken

Questions connexes