2010-05-14 15 views
7

mod_rewrite mi sconcerta sempre ... Qualcuno può dirmi le regole che mi servono per ottenere i seguenti URL puliti? URL desiderato a sinistra, URL reale a destra.URL semantici per file HTML statici con .htaccess e mod_rewrite

/our-work/ => /our-work.html 
/our-work/some-project/ => /our-work/some-project.html 
/contact/ => /contact.html 

Come potete vedere, voglio forzare trailing slash su tutti gli URL troppo.

Grazie!

risposta

10

Prova questa regola:

RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(.+)/$ $1.html [L] 

e per l'aggiunta finale barre:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301] 

Assicurati di mettere quelle regole che causano un reindirizzamento esterno (in modo esplicito utilizzando R bandiera o implicitamente) in davanti a quelle regole che causano solo un reindirizzamento/riscrittura interno. Quindi in questo caso:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301] 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(.+)/$ $1.html [L] 
+0

Grazie. Funziona per il livello/il nostro esempio/di lavoro ma finisce per reindirizzarmi a URL come /redirect:/our-work/some-project.html.html.html/ quando sto colpendo URL con due livelli come/nostro -Lavoro/some-progetto /. Devo anche dire che sto usando questo su un URL localhost al momento con le porte specificate. – alistairholt

+0

Appena testato in un altro ambiente, l'URL di reindirizzamento pazzo era un problema da qualche altra parte, nessuna idea di dove. La tua soluzione è perfetta, grazie! – alistairholt

+1

@ alistair.mp: Ah, hai ragione. Ho aggiunto una condizione che verifica se la riscrittura sarà puntata su un file esistente per evitare una ricorsione infinita. – Gumbo

Problemi correlati