2009-06-09 4 views
0

Par exemple, j'ai une URL qui ressemble à une image comme ceci:Comment puis-je rediriger toutes les URL qui ne demandent pas d'image JPEG ou PNG à index.php/x?

http://example.com/img/foo.png
http://example.com/img/interface/menu/bar.png
http://example.com/static/users/avatars/small/3k5jd355swrx221.jpg

Je ne veux pas rediriger ceux-ci. Ils devraient juste passer. Mais alors, je les URL comme ceci:

http://example.com/register/
http://example.com/my_account/my_picture/
http://example.com/contact/email/

Toutes ces URL qui ne demande pas un .png ou .jpeg doivent être redirigés vers:

http://example.com/index.php/x

où x signifie tout après example.com/, donc dans cet exemple par exemple:

http://example.com/register/ à
http://example.com/index.php/register/

http://example.com/my_account/my_picture/ à
http://example.com/index.php/my_account/my_picture/

http://example.com/contact/email/ à
http://example.com/index.php/contact/email/

(AcceptPathInfo est activé)

Est-il possible de le faire dans le .htaccess? Je ne sais comment je pourrais le faire si j'avais toujours quelque chose comme http://example.com/someKindOfMarkerHere/stuff/stuff/stuff mais je ne veux pas avoir le someKindOfMarker là pour détecter si c'est une URL qui doit être réécrite. Je ne sais pas comment les exclure.

Répondre

3

Vous pouvez exclure des URL spécifiques:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/index\.php$ 
RewriteRule !.*\.(jpeg|png)$ index.php%{REQUEST_URI} 

Ou vous exclure tout fichier existant:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php%{REQUEST_URI} 
+0

Nice. Ça va le faire. – Christian

1

enfer oui, il est possible. Mod_rewrite fera tout cela pour vous assez facilement.

Vous pouvez également configurer un gestionnaire d'erreurs, donc chaque 404 sur votre site est redirigé via index.php. C'est un bon moyen de s'assurer que toutes les requêtes chargent index.php (ou votre bootstrap). Le mod_rewrite aura besoin d'une regex et regex me fera mal à la tête, donc je laisserai quelqu'un d'autre en écrire un.

Espérons que ça aide. Juste commentaire si vous avez besoin de plus d'informations de moi.:)

2
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} ^.+\.png$ [OR] 
RewriteCond %{REQUEST_FILENAME} ^.+\.jp(e)?g$ 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php/%{REQUEST_URI} [NC,L] 
1

J'utiliseraient une légère variation de la réponse de Gumbo:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php%{REQUEST_URI} 

Il exclut les dossiers ainsi que les fichiers (le drapeau! -d) - vous ne pouvez pas ne pas vouloir cela, mais pense qu'il appartient ici pour l'exhaustivité.

0

Ce qui suit ignore les fichiers, dossiers et fichiers existants avec l'extension correspondante: jpg, jpeg, png, gif. Si vous souhaitez ajouter une extension supplémentaire, ajoutez simplement "| extension" avant le) $ sur la ligne 3.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !.(jpg|jpeg|png|gif)$ 
RewriteRule ^(.*)?$ /index.php/$1 [QSA,L] 
Questions connexes