Jag har tidigare använt mod_rewrite och då radat upp alla anrop som skulle skrivas om.
T ex:
RewriteEngine On
RewriteRule ^(sida1|sida2|sida3|sida4|sida5)/?$ $1.php
för att sida1 ska pekas om till sida1.php.
Nu vill jag istället göra det hela lite mer dynamiskt, och utgick ifrån följande instruktioner:
http://www.webforum.nu/showthread.php?s=&postid=978302#post978302
http://www.webmasterworld.com/forum92/2907.htm
Jag använder nu
# Läs av användarvänliga länkar
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ $1.php [QSA,NC,L]
(någon som vill förklara vad [QSA,NC,L] betyder?)
Det fungerar bra, när jag försöker komma åt sidor som finns, d.v.s. skriver jag sida1 kommer jag mycket riktigt till sida1.php.
Problemet uppkommer när jag skriver en sida som inte finns, t ex finnsinte. Min gissning är att eftersom finnsinte.php inte existerar går Apache tillbaka till ruta 1, och gör samma check igen. Efter ett tag inser den att det är lönlöst, och spottar ur sig ett 500-felmeddelande.
Som ett RewriteCond vill jag därför lägga till
RewriteCond [ matcha ^([^/]+)/?$ med anropet. om $1.php inte finns: avbryt ]
Alternativet är att skicka alla anrop som saknar matchning i filsystemet till ett PHP-skript, men det känns lite för omständligt.