2009-12-10 7 views
3

Je voudrais me débarrasser de toutes les extensions de fichiers sur mon site. Sauf quand ils sont sur l'indice je voudrais de dire rien ...Utiliser ModRewrite pour se débarrasser des extensions

changer cette foo.com/index.html
à ce foo.com/

et lorsque l'utilisateur passe à une autre page comme foo.com/contact-us.html
il sera foo.com/contact-us

RewriteEngine On 
RewriteRule^this is where i get confused :(

Merci à l'avance!

Répondre

3

Essayez ces règles:

RewriteRule ^index\.html$/[L,R=301] 
RewriteRule (.+)\.html$ /$1 [L,R=301] 
+0

Merci mille fois! – PHPNooblet

+0

qu'est-ce que [L, R = 301] signifie par intérêt? –

+1

Je suis assez sûr qu'il dit à Apache de ne plus appliquer de règles et de rediriger vers une nouvelle URL. – PHPNooblet

2

j'utiliser une méthode légèrement différente:

RewriteCond %{REQUEST_FILENAME}\.html -f # if request.html exists and is a file 
RewriteRule ^(.+)$ $1\.html [QSA] # then rewrite to that file. 
+0

@TRiG: +1 très intéressant. Lorsque le navigateur demande 'http: // domain.com/test', le serveur sert' http: // domain.com/test.html' sans que l'adresse URL du navigateur soit modifiée car nous ne redirigeons pas. Ai-je bien compris? –

+1

@Marco, Oui, c'est tout. Lorsque le navigateur demande '/ test', le serveur recherche un fichier appelé' test.html' et le sert. Si le fichier 'test.html' n'existe pas, le serveur recherche un fichier ou un répertoire appelé' test' et le sert. A défaut, cela donnera la page 404 par défaut. – TRiG

+0

@TRiG: merci pour l'explication. Dernière question, quand l'utilisateur demande 'foo.com/index.html', le serveur sert simplement' foo.com/index.html' sans réécriture car le 'RewriteCond% {REQUEST_FILENAME} \. Html -f' n'est PAS rencontré?! –

0

Il ne doit pas être si compliqué, apache a une option pour accomplir ce que vous voulez :

Il suffit d'ajouter cette règle à votre .htaccess et/contactez-nous/sera automatiquement réécrite pour contacter-us.html:

 
Options MultiViews 

C'est tout!

+0

van del Bogend: J'ai entendu dire que cela ne fonctionne pas lorsque le navigateur qui demande des pages au serveur est IE. –

+0

Ce n'est pas vrai, c'est un truc côté serveur, donc ça n'a rien à voir avec le navigateur. Tant que les en-têtes sont corrects, aucun navigateur ne se plaindra. Je l'utilise à grande échelle et je n'ai eu aucune plainte à ce sujet. –

Questions connexes