webForumDet fria alternativet

Rewrite som funkar för både katalog och katalog/ ?

Webbservrar

5 svar · 833 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

Hej alla glada!

Jag har detta i min .htaccess:

RewriteEngine on
RewriteRule ^(home|about|contact)/?$ index.php?action=$1

Och vill att t.ex. både hej.com/about och hej.com/about/ ska generera: hej.com/index.php?action=about

Det verkar som att min kod i båda fallen skickar ut "about" i action-variabeln, men när jag skriver about/ så hittar den dessutom på något annat och skriver om så att alla mina andra sökvägar inte hittas (till bilder och stylesheet-fil m.m.). Jag kan inte regexp så bra så ni ser säkert direkt hur jag borde göra i stället ;)

Tack!

edit/
När jag skriver hej.com/about**/** så blir alla mina länkar på sidan hej.com/about/sida.html

Medlem sedan aug. 20039 340 inlägg
#2

Felet beror på att webbläsaren tolkar /about/ som att du befinner dig i en mapp och letar efter din (relativt angivna) stilmall i /about/stilmall.css. Samma sak med länkar. Den eklaste och bästa lösningen är att alltid ange absoluta sökvägar, dvs börja sökvägen med /.

<a href="[u]/[/u]sida.html">
<link rel="stylesheet" type="text/css" href="[u]/[/u]stilmall.css" />
Medlem sedan nov. 20016 480 inlägg
#3

Ja, det funkar ju faktiskt :) Tack.

Återkommer säkert med fler rewrite-frågor snart ;)

Medlem sedan nov. 20016 480 inlägg
#4

I'm back ;)

Jag kör detta och det funkar på en server, men på en annan så får jag fel så länge jag har med rad 3-4 också. Bara rad 1-2 funkar bra!

RewriteEngine on
RewriteRule ^(home|about|contact)/?$ index.php?action=$1
RewriteRule ^(home|about|contact)/([A-Za-z0-9-_]+)/?$ index.php?action=$1&person=$2
RewriteRule ^(home|about|contact)/([A-Za-z0-9-_]+)/ID-([0-9]+)-([A-Za-z0-9-_]+)/?$ index.php?action=$1&person=$2&id=$3

Går det att skriva det jag vill göra på ett bättre sätt också? ;)

Och sista frågan, om jag på detta vill kunna lägga till vanliga querystrings, är det möjligt, utan att den tolkar in min querystring i regexp:en?
T.ex.
about/basse/ID-1-minpost/?keyword=sökord

Jag är som sagt ute på okänt vatten här, men prio ett är att få min rewrite-kod att funka på båda servrarna. Den ena verkar tolka hårdare eller nåt...

Tack!

Medlem sedan aug. 20039 340 inlägg
#5

I en grupp med tecken i en regex så har - (bindestreck) normalt en speciell betydelse, nämligen att definiera omfång av tecken, t ex a-z. Därför kan man inte placera - mitt i gruppen när man uttryckligen vill matcha det tecknet. Du måste placera dessa tecken först eller sist i gruppen. Alltså [A-Za-z0-9_-] eller [-A-Za-z0-9_]. Eventuellt kan det variera mellan Apache-versioner om den accepterar bindestreck i början eller slutet av gruppen. Om den ena ger fel, prova den andra.

Apache tolkar aldrig in querystringen till det som matchas av regexen. Fil-delen av URL'en och querystringen räknas som olika delar, och det är bara "filsökvägen" som matchas av regexen. Däremot rensas querystringen varje gång du har en regel som ändrar querystringens innehåll. Sättet runt detta är att lägga till [QSA] på slutet av de regler som gör detta. Då behålls den gamla querystringen.

RewriteEngine on
RewriteRule ^(home|about|contact)/?$ index.php?action=$1 [QSA]
RewriteRule ^(home|about|contact)/([-A-Za-z0-9_]+)/?$ index.php?action=$1&person=$2 [QSA]
RewriteRule ^(home|about|contact)/([-A-Za-z0-9_]+)/ID-([0-9]+)-([-A-Za-z0-9_]+)/?$ index.php?action=$1&person=$2&id=$3 [QSA]

Jag avmarkerade för övrigt det lösta svaret eftersom bävergudarna inte gillar trådar som med olösta frågor, som är markerade som lösta.

Medlem sedan nov. 20016 480 inlägg
#6

Burrigt! Funkade prima! :birp

250 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)