2010-02-08 9 views
2

J'ai un fichier .htaccess avec un certain nombre de RewriteRules.Comment simuler [L] dans .htaccess

Comment puis-je exclure les fichiers et répertoires déjà existants de l'exécution de chacune des paires RewriteCond/RewriteRule?

Ce:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [F,L] 

ne fonctionnera pas correctement car selon this SO question:

dans le contexte .htaccess, [L] ne forcera mod_rewrite à arrêter. il continuera à déclencher des sous-requêtes internes:

Comment puis-je faire fonctionner cette fonction? Alternativement, existe-t-il une structure de contrôle comme si la condition s'applique, passez par ce bloc de règles, sinon sautez et allez à la fin dans mod_rewrite?

+0

devrait être affiché sur ServerFault – Steen

+0

Oui, j'ai eu cette discussion déjà avec ma dernière question mod_rewrite. Eh bien, si cinq personnes pensent de cette façon, alors migrez-la si vous le voulez, mais tant que nous répondons à toutes sortes de questions HTML sur SO qui ont beaucoup, beaucoup moins à faire avec la programmation que n'importe quelle question mod_rewrite, Je continuerai à poster des questions mod_rewrite ici. (ne vous attaquait pas ici, il fallait juste en sortir à la bonne occasion, ce qui était cette question.) –

+0

A la vôtre. Heureux de donner l'occasion :) Ce qui est important, c'est que vous obteniez une réponse à votre question, ce qui semble être le cas. – Steen

Répondre

1

Le problème avec votre règle est que les deux conditions ne peuvent pas être remplies en même temps car un fichier normal (-f) ne peut pas également être un répertoire (-d). Essayez ceci:

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 
+0

(claque la tête) bien sûr. Merci Gumbo. Puis-je me fier à '[L]' travaillant dans ce contexte malgré ce que dit la citation? –

+0

Cela devrait fonctionner, vous pouvez toujours ajouter l'indicateur [NS] à la règle (c'est-à-dire [L, NS]), ce qui signifie ignorer pour les sous-requêtes internes. Le meilleur moyen est de le sucer et voir malheureusement, mod_rewrite est un peu d'un art noir :) – Paolo

+0

Strange. Est-ce que quelqu'un sait pourquoi '-d' ne s'applique pas aux ressources demandées avec une barre oblique' www.example.com/directory/'? –