2010-01-10 10 views
0

Ceci est mon fichier htaccessLogique AND dans htaccess modrewrite?

RewriteBase/

RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 

RewriteCond %{REQUEST_URI} !^/chat/ 
RewriteCond %{REQUEST_URI} !^/m/ 
RewriteCond %{REQUEST_URI} !^/__admin/ 
RewriteCond %{REQUEST_URI} !^/gzip_headers.php 
RewriteCond %{REQUEST_URI} !^/phpfreechat/ 
RewriteCond %{REQUEST_URI} !^/_temp/ 


RewriteRule ^.+\.php$ index.php [L] 

RewriteRule ^.*\.css gzip_headers.php [L] 
RewriteRule ^.*\.js gzip_headers.php [L] 

RewriteRule ^classifieds/ /index.php [L] 

RewriteCond %{REQUEST_URI} !^/movies/. 
RewriteRule ^movies/ /index.php [L] 

RewriteCond %{REQUEST_URI} !^/games/. 
RewriteRule ^games/ /index.php [L] 

RewriteRule ^jntu/ /index.php [L] 
RewriteRule ^news/ /index.php [L] 

Mon idée derrière ce principe est,

  • avant tout public_html/index.php (sauf certains répertoires)
  • avant tous js et css à gzip fichier, (je le fais essentiellement parce que je ne suis pas jsut gzipping eux mais également en compressant dans phpfile)
  • le problème est lorsque je charge des images à partir de sous-répertoires les sont également redirigés vers index.php, donc juste en créant conditions pour les répertoires et stocker des images dans les comme RewriteCond %{REQUEST_URI} !^/games/.

Je voudrais faire simple à faire des trucs comme ça

  • avant tout à index.php (sauf certaines conditions sur le dessus)
  • transférer le fichier css et js vers gzip
  • charger les images et le flash et d'autres types de mime directement, s'ils existent. (Jpg | gif | png | swf | flv | mp4 | 3gp | mp3 | zip | rar | exe)

Quelque chose comme drapeau logique ET REQUEST_URI et -f Je suppose que

Répondre

1

Essayez ces règles:

RewriteCond %{HTTP_HOST} =example.com [NC] 
RewriteRule^http://www.example.com%{REQUEST_URI} [L,R=301] 

RewriteRule .*\.(js|css)$ gzip_headers.php [L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule .+\.(jpg|gif|png|swf|flv|mp4|3gp|mp3|zip|rar|exe)$ - [L] 

RewriteCond %{REQUEST_URI} !^/(gzip_headers|index)\.php$ 
RewriteCond %{REQUEST_URI} !^/(chat|m|__admin|phpfreechat|_temp)/ 
RewriteRule ^.+\.php$ index.php [L] 
+0

C'était génial :) exactement ce que je cherchais, j'ai ajouté ceci à la fin et espère que c'est correct 'RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_URI} ^/(films | jeux | jntu | actualités | petites annonces)/ RewriteRule ^. /index.php [L] ' –

0

Je ne sais pas pourquoi vos images sont redirigées si votre règle ne redirige que les URI se terminant par ".php". Cela devrait exclure toutes les autres extensions de fichiers de la règle.

Je ne suis pas sûr de savoir ce que vous voulez dire en ayant besoin de 'logique et'. Lorsque vous avez un nombre de RewriteCond lignes avant un RewriteRule ces conditions sont ensemble et la règle est appliquée uniquement si elles sont toutes vraies.

Vous ne pouvez pas utiliser modrewrite pour vérifier l'existence de fichiers et dire "si le fichier existe, n'appliquez aucune règle, ne faites que servir le fichier". Je pense que la meilleure solution serait soit d'utiliser un seul répertoire de haut niveau appelé 'static' ou 'images' où vous mettez tous vos fichiers et les excluez des règles, ou avez une règle de correspondance plus large. Ainsi, par exemple, vous pouvez faire de 'static' ou 'images' un nom de répertoire spécial et exclure toute URL contenant .*/images/.* des règles. Alors /something/images/image.jpg et /something/else/images/image.jpg seraient tous deux exclus et le fichier serait servi.

Une autre manière hacky serait de servir les fichiers de PHP. Donc, en PHP, vous traduisez $_SERVER['REQUEST_URI'] en un nom de fichier et voyez s'il existe. Si c'est le cas, vous pouvez écrire le contenu du fichier dans le flux de sortie PHP, bien que cela ne soit pas aussi efficace que de le laisser à Apache, et en fait je ne le recommanderais vraiment pas.

Mais comme je l'ai déjà dit, si votre règle ne fait que correspondre aux fichiers qui se terminent par .php, vos images ne devraient pas être redirigées. Je comprendrais pourquoi cela arrive en premier. Il existe un moyen d'activer la journalisation du débogage pour mod_rewrite, mais vous devrez le faire.

+0

Salut, les images affichées ne coûtent pas parce que la règle de réécriture pour php est surchargée par ces RewriteCond% {REQUEST_URI} ^/jeux /!. RewriteRule^games//index.php [L] –