2010-01-19 4 views
0

Je veux être en mesure de réécrire cetteignores mod_rewrite [L]

http://localhost/.../identicon/f528764d624db129b32c21fbca0cb8d6.png 

à

http://localhost/.../identicon.php?hash=f528764d624db129b32c21fbca0cb8d6 

donc ajouter au /.../.htaccess il en est ainsi: il

Ce qui ne fonctionne pas pour une raison quelconque, car il le redirige vers index.php? T = identicon.php; même si le drapeau L est réglé! Pourquoi?

+0

En quoi cela ne fonctionne-t-il pas? – Matchu

+0

@Matchu ajouté maintenant, il redirige vers index.php au lieu de identicon.php. – MiffTheFox

Répondre

2

Ajouter une condition à la dernière règle d'exclure les demandes qui peuvent être mis en correspondance avec les fichiers existants:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?t=$1 [QSA,L] 

Cela est nécessaire parce que le L flag génère une redirection interne avec la nouvelle URL comme l'URL de la requête : cependant,

Rappelez-vous que si le RewriteRule génère une redirection interne (ce qui se produit fréquemment lors de la réécriture dans un contexte par répertoire), cela réinjection la re recherche et répétera le traitement à partir du premier RewriteRule.

0

(Pas de réponse correcte, gauche pour plus)


Je viens de comprendre ce qui peut être la question - c'est quelque chose qui me déjoué depuis longtemps. Selon les paramètres de votre serveur, il peut très bien être interprété identicon/xxx.png comme une demande à identicon.php/xxx.png, en supposant que l'extension PHP est ce que vous vouliez. Essayez d'aller à /index au lieu de /index.php - s'il charge le fichier PHP, c'est le problème qui vous affecte.

Ceci est l'option MultiViews Apache, et c'est stupide, mais il doit être activé spécifiquement. Allez dans le fichier de configuration de votre site et voyez où il est activé, et supprimez-le.

Si vous n'avez pas de contrôle total sur la configuration de votre serveur, les opérations suivantes peuvent fonctionner dans .htaccess (cela dépend, ironiquement, de la configuration de votre serveur).

Options -Multiviews 
+0

J'ai fait index.php vider la valeur de $ _GET ['t'] à l'écran: 'index/a.png' imprime' index/a.png', mais 'identicon/a.php' ne fait que dumps' identicon. php'. En outre, j'ai essayé de changer "identicon" dans le RewriteRule à quelque chose d'autre et il a échoué. – MiffTheFox

+0

Et non, MultiViews n'est pas activé. – MiffTheFox