2009-04-01 11 views
1

Voici mon fichier .htaccess actuel:question simple mod rewrite

RewriteRule ^$ index.html [QSA] 
RewriteRule ^([^.]+)$ $1.html [QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] 

Comme vous pouvez le voir, les demandes de http://domain.com vont http://domain.com/index.html. Je veux changer cela afin qu'ils vont à http://domain.com/foo, s'il vous plaît noter que n'existe pas en tant que fichier ou un dossier, il est géré par des rails. Comment puis-je faire cela? Notez que j'ai essayé ce qui suit et cela ne fonctionne pas:

RewriteRule ^$ foo [QSA] 
RewriteRule ^([^.]+)$ $1.html [QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] 

Merci!

Répondre

1

Vous êtes probablement sûr de changer juste la première ligne à ceci:

RewriteRule ^$ foo [QSA,L] 

Le drapeau L dit-mod rewrite qu'il ne devrait pas appliquer d'autres règles après celui-là. Le problème en ce moment est que la deuxième règle est appliquée après la première, et vous finissez par "foo.html", au lieu de "foo", non? La différence entre la tentative d'envoi à "foo" et la redirection d'origine vers "index.html" est que la deuxième règle s'applique aux demandes qui n'incluent pas de point. Ainsi, lorsque la première règle redirigeait vers "index.html", après son utilisation, la deuxième règle n'était plus valide. Cependant, maintenant que vous ne redirigez pas vers un emplacement contenant une période, la deuxième règle est appliquée après la première, ce qui vous permet d'obtenir une double redirection. En outre, vous pouvez peut-être supprimer le drapeau QSA de la première ligne, cela dépend cependant de votre site. Si quelqu'un accède au site comme http://domain.com/?user=fred, voulez-vous les envoyer à http://domain.com/foo?user=fred, ou simplement http://domain.com/foo? Si vous n'avez pas besoin Q uery S Tring A ppended, vous pouvez déposer le drapeau QSA, et juste:

RewriteRule ^$ foo [L] 
+0

Le problème avec L est que la dernière ligne n'exécute pas , donc ça ne va pas aux rails (j'utilise fastcgi). J'ai même essayé votre suggestion (sans le L) et supprimé la deuxième ligne et cela n'a toujours pas fonctionné. – Birdman