2010-05-14 13 views
7

mod_rewrite zawsze mnie zaskakuje ... czy ktoś może mi podać reguły, których potrzebuję, aby uzyskać następujące czyste adresy URL? Żądany URL po lewej stronie, prawdziwy adres URL po prawej stronie.Semantyczne adresy URL statycznych plików HTML z .htaccess i mod_rewrite

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

Jak widać, chcę wymusić ukośne ukośniki we wszystkich adresach URL.

Dzięki!

Odpowiedz

10

Spróbuj zasadę:

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

i dodawania końcowe ukośniki:

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

Upewnij się umieścić te przepisy, które powodują zewnętrznego przekierowanie (jawnie przy użyciu R flagę lub pośrednio) w front tych zasad, które powodują wewnętrzne przekierowanie/przepisywanie. W takim przypadku:

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

Dzięki. Działa to na najwyższym poziomie/naszej pracy/przykład, ale kończy przekierowywanie mnie do adresów URL, takich jak /redirect:/our-work/some-project.html.html.html/ kiedy wybieram adresy URL na dwóch poziomach, takich jak/nasz -work/some-project /. Należy również powiedzieć, że używam tego na lokalnym local URL w tym momencie z określonych portów – alistairholt

+0

Po prostu przetestowany w innym środowisku, szalony przekierowany adres URL był problemem z innego miejsca, bez pojęcia gdzie. Twoje rozwiązanie jest idealne dzięki! – alistairholt

+1

@ alistair.mp: Ach, masz rację. Dodałem warunek, który sprawdza, czy przepisanie będzie wskazywało na istniejący plik, aby uniknąć nieskończonej rekursji. – Gumbo

Powiązane problemy