webForumDet fria alternativet

Apache - RegExp i RewriteCond

3 svar · 352 visningar · startad av dectgap

dectgapMedlem sedan sep. 20021 655 inlägg
#1

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.

dectgapMedlem sedan sep. 20021 655 inlägg
#2

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.

jarvkloMedlem sedan juli 20013 378 inlägg
#3

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

dectgapMedlem sedan sep. 20021 655 inlägg
#4

Tack för förklaringen :)

127 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)