Tydligen gick det att göra på följande sätt:
RewriteCond %{REQUEST_FILENAME}.php -f
Om någon har en smartare lösning på lager tages den gärna emot.
3 svar · 352 visningar · startad av dectgap
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.
Tydligen gick det att göra på följande sätt:
RewriteCond %{REQUEST_FILENAME}.php -f
Om någon har en smartare lösning på lager tages den gärna emot.
Re: Apache - RegExp i RewriteCond
dectgap skrev:
(någon som vill förklara vad [QSA,NC,L] betyder?)
Kejrå :e
QSA == "Query String Append"
Ser till att alla Inparametrar även läggs till i den omskrivna URL:en
NC == "No Case"
Regeln är skiftlägesoberoende
L == "Last rule"
Anger att omskrivningsmotorn ovillkorligen skall avbrytas efter det att regeln utförts och att inga fler möjligheter skall undersökas.
Mer detaljer och info finns bl.a. i http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule
:birp
Tack för förklaringen :)