2008-12-01 3 views
4

j'ai un site Web qui emploie une règle de mod_rewrite générique pour pousser toutes les demandes à la page index.php, à l'exception de certaines extensions de fichiers:URL couverture Réécrire redirect exceptions annuaire

RewriteRule !\.(js|ico|gif|jpg|JPG|png|css|php|phtml|pdf|txt|xml)$ index.php 

Ce que je dois être capable de faire est également d'exclure un certain répertoire (y compris les fichiers ou sous-répertoires contenus dans) à partir de cette règle - quelle est la meilleure solution?

Voici mon dossier complet .htaccess, dans le cas où quelque chose d'autre à l'intérieur il est intefering:

RewriteEngine ON 
RewriteCond %{HTTP_HOST} !^www\..* 
RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} ^([^.]*)\.(co\.uk) 
RewriteRule ^.*$  http://www.%1.%2%{REQUEST_URI} [R=permanent,L] 

AddHandler application/x-httpd-php .phtml 

RewriteRule !\.(js|ico|gif|jpg|JPG|png|css|php|phtml|pdf|txt|xml)$ index.phtml 

php_value display_errors "On" 

Répondre

7

Avant la ligne que vous avez cité, pour un répertoire nommé « style », par exemple, vous avez besoin:

RewriteRule ^style/ - [L] 

Le trait d'union signifie « pas redirection » et le « [L] » dernière règle » des moyens ', comme ne pas continuer à essayer de faire correspondre l'URL aux règles suivantes. Vous pouvez mettre autant de lignes que vous le souhaitez, mais elles doivent être avant la ligne que vous avez indiquée dans la question.

+0

Cela fonctionnerait-il pour tous les fichiers et sous-dossiers? J'ai essayé cette solution, mais bien que la redirection soit ignorée pour mon répertoire, aucun fichier n'y est accessible? – BrynJ

+0

Oui, je cours cette ligne exacte (comme il a été coupé et collé) sur mes sites en ce moment, et tout dans les répertoires est accessible. – jTresidder

+0

J'ai encore essayé, et via Firefox j'ai établi qu'une boucle de redirection est en cours - c'est une installation de WordPress, et je pense que cela est déroutant car il inclut sa propre magie de redirection. Y at-il une autre règle qui pourrait être nécessaire pour l'obtenir à jouer au ballon? – BrynJ

0

Vous pouvez vérifier avec RewriteCond %{REQUEST_FILENAME} !-f pour toute demande qui ne correspond pas à un nom de fichier existant.

+0

Je suis entièrement sûr que je comprends votre réponse - j'ai essayé votre suggestion et encore une fois il n'a pas semblé avoir un effet. J'ai un répertoire appelé blog, que j'ai besoin d'accéder normalement - alors visiter mysite.com/blog devrait afficher le index.php contenu dedans, mais il est toujours redirigé pour le moment. – BrynJ

+0

Je voulais dire que je ne suis pas entièrement sûr! Merci pour votre aide en passant. – BrynJ

+0

Cette condition est vérifiée avant votre réécriture réelle. Il semble qu'il y ait un fichier qui correspondrait. Et vous voulez que toutes les URL des images et des styles existants restent les mêmes, sans réécriture. – stesch